使用Simple Injector通过反射注册延迟参数

时间:2017-08-20 07:27:31

标签: c# reflection simple-injector

我的服务类有两个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);
}

是否有解决上述问题的方法?

0 个答案:

没有答案