Unity IoC 解析并注入 类 实现通用接口的集合
Unity IoC resolve and inject a collection of classes implementing a common interface
我有几个 classes 实现相同的接口,但以不同的名称注册。我想将它们作为一个集合注入到构造函数中,unity 无法理解。
interface IA{}
interface IB { IEnumerable<IA> As { get; set; } }
class A1 : IA{}
class A2 : IA {}
class B : IB
{
public IEnumerable<IA> As { get; set; }
public B(IEnumerable<IA> ass)
{
As = ass;
}
public B(IA a)
{
var b = 1;
}
}
现在我要注入它们
[TestMethod]
public void ResolveMultiple()
{
var container = new UnityContainer();
container.RegisterType<IA, A1>("A1");
container.RegisterType<IA, A2>("A2");
container.RegisterType<IB, B>();
var b = container.Resolve<IB>();
Assert.IsNotNull(b);
Assert.IsNotNull(b.As);
var manyAss = container.ResolveAll<IA>();
}
最后一行有效,所以我得到了两个 classes (A1, A1) 的集合,但是没有创建 B class。
是否需要额外配置?
好的,解决方案是教 unity 使用 IEnumerable
_container.RegisterType(typeof(IEnumerable<>), new InjectionFactory((unityContainer, type, name) => unityContainer.ResolveAll(type.GetGenericArguments().Single())));
我有几个 classes 实现相同的接口,但以不同的名称注册。我想将它们作为一个集合注入到构造函数中,unity 无法理解。
interface IA{}
interface IB { IEnumerable<IA> As { get; set; } }
class A1 : IA{}
class A2 : IA {}
class B : IB
{
public IEnumerable<IA> As { get; set; }
public B(IEnumerable<IA> ass)
{
As = ass;
}
public B(IA a)
{
var b = 1;
}
}
现在我要注入它们
[TestMethod]
public void ResolveMultiple()
{
var container = new UnityContainer();
container.RegisterType<IA, A1>("A1");
container.RegisterType<IA, A2>("A2");
container.RegisterType<IB, B>();
var b = container.Resolve<IB>();
Assert.IsNotNull(b);
Assert.IsNotNull(b.As);
var manyAss = container.ResolveAll<IA>();
}
最后一行有效,所以我得到了两个 classes (A1, A1) 的集合,但是没有创建 B class。
是否需要额外配置?
好的,解决方案是教 unity 使用 IEnumerable
_container.RegisterType(typeof(IEnumerable<>), new InjectionFactory((unityContainer, type, name) => unityContainer.ResolveAll(type.GetGenericArguments().Single())));