我的服务类有两个IRepository实例( ICacheRepository 和 ISqlRepository ),ICacheRepository实现总是在服务中使用,但有时会使用ISqlRepository实现。 我通过Reflection在Simple Injector中注册 ICacheRepository 接口的所有实现:
var registrations = assembly.GetExportedTypes()
.Where(type => type.IsClass && baseType.IsAssignableFrom(ICacheRepository))
.Select(type => new { Interface = type.GetInterfaces().First(), Implementation = type });
foreach (var reg in registrations)
{
container.Register(reg.Interface, reg.Implementation, Lifestyle.Transient);
}
我找到Lazy Register解决方案来注册一个接口实例。但我希望通过Reflection在惰性模式下注册所有 ISqlRepository 接口的实现。我想要的解决方案是:
var registrations = assembly.GetExportedTypes()
.Where(type => type.IsClass && baseType.IsAssignableFrom(ISqlRepository))
.Select(type => new { Interface = type.GetInterfaces().First(), Implementation = type });
foreach (var reg in registrations)
{
container.Register(() => new Lazy<reg.Interface>(container.GetInstance<typeof(reg.Implementation) >), Lifestyle.Transient);
}
是否有解决上述问题的方法?