注入实现通用接口的实例,无需指定泛型类型

时间:2016-06-16 17:39:25

标签: c# autofac

我想注入实现通用接口的实例集合,而不指定类型。我想要的是什么:

public MyConstructor(IEnumerable<MyGenericInterface<>> implementations) 
{
      //Autofac injects implementations...
}

使用这样的反射挖掘容器注册是什么样的工作:

var genericRegistrations= container.ComponentRegistry.Registrations.Where(r => r.Activator.LimitType.GetInterfaces().Any(x=>x.IsGenericType&&x.GetGenericTypeDefinition()==typeof(MyGenericInterface<>))).Select(r => r.Activator.LimitType);
var typesThatImplementMyGenericInterface= container.ComponentRegistry.Registrations.Where(r => genericRegistrations.Any(x=>x.IsAssignableFrom(r.Activator.LimitType))).Select(r => r.Activator.LimitType);

var implementations= typesThatImplementMyGenericInterface.Select(t => container.Resolve(t));

我遇到的问题是我必须使用.AsSelf()而不是.AsImplementedIntefaces()来注册实现,就像我想要注册它们一样。另一个问题是,这需要我在业务逻辑代码中引用容器,或者编写一些可以深入到容器中的其他包装器/提供器,它只会破坏Autofac魔法。

0 个答案:

没有答案