在回答这个问题时,我无法找出使用LifetimeScopeLifestyle
SimpleInjector 中的实例注册许多泛型类型实现的最佳技术。
这种注册形式的推荐方法是这样的:
container.RegisterManyForOpenGeneric(typeof(IRepository<>),
typeof(IRepository<>).Assembly);
但这不允许LifetimeScopeLifestyle
传入的实例。
下面是我想出的,但我知道它没有足够的弹性,因为它正在检查任何通用接口,而不是专门IRepository<>
的 . 谁能告诉我该怎么做?
public static void Configure(Container container)
{
var lifetimeScope = new LifetimeScopeLifestyle();
container.Register<IUnitOfWork, UnitOfWork>(lifetimeScope);
//this query needs improvement
var registrations =
from type in typeof(IRepository<>).Assembly.GetExportedTypes()
where typeof(IRepository).IsAssignableFrom(type)
&& type.IsClass
&& !type.IsAbstract
from service in type.GetInterfaces()
where service.IsGenericType
select new { Service = service, Implementation = type };
foreach (var registration in registrations)
{
container.Register(registration.Service,
registration.Implementation, lifetimeScope);
}
}