为所有通用存储库注册所有依赖项注入
本文关键字:依赖 注入 注册 存储 | 更新日期: 2023-09-27 18:25:27
我有太多的DAL类,我需要为通用存储库注册依赖项注入。
类示例:
[CollectionName("RenameMe")]
public class Test{
[BsonId]
public ObjectId ID { get; set; }
[BsonElement("u")]
public Guid UserID { get; set; }
}
通用类示例:
public class GenericRepository<T, ID> : IGenericRepository<T, ID>
{
public virtual T Save(T pobject)
{
_repository.Save(pobject);
return pobject;
}
}
当我手动注册时,我确实喜欢:
container.Register<IGenericRepository<DAL.Product, Guid>, GenericRepository<DAL.Product, Guid>>();
我如何为DAL命名空间中的每个类自动创建这个,ofc具有CollectionName属性:
private Container RegisterDAL(Container container)
{
var classes =
from t in Assembly.GetExecutingAssembly().GetTypes()
where t.Namespace != null
where t.IsClass
where t.Namespace.StartsWith("DAL")
where t.CustomAttributes
.Any(i => i.GetType() == typeof(CollectionNameAttribute))
select t;
foreach (var dalClass in classes)
{
var idType = dalClass.CustomAttributes.First(
p => p.AttributeType == typeof(BsonIdAttribute));
// what to fill in in the question marks?
container.Register<IGenericRepository<?, ?>, GenericRepository<?,?>>();
}
return container;
}
您可以创建一个开放的通用映射:
// using SimpleInjector.Extensions;
container.RegisterOpenGeneric(
typeof(IGenericRepository<,>),
typeof(GenericRepository<,>));
RegisterOpenGeneric
扩展方法位于核心库的SimpleInjector.Extensions
命名空间中。
那将很好地解决你的问题。