我的容器配置如下:
container = new UnityContainer()
.RegisterType<IA, A>()
.RegisterType<IB, B>()
.RegisterType<IC, C>(new InjectionConstructor(strA));
我需要的是,我想注册另一个C实例,如:
container.RegisterType<IC, C>(new InjectionConstructor(strB));
注意strA和strB之间的区别。
A和B都需要C.但是我希望A使用第一个C和B来使用第二个C.
Unity有没有正确的方法来实现这一目标?
由于
答案 0 :(得分:2)
您需要使用named type registration。
var container = new UnityContainer()
.RegisterType<IC, C>("ForA", new InjectionConstructor(strA))
.RegisterType<IC, C>("ForB", new InjectionConstructor(strB))
.RegisterType<IA, A>(new InjectionConstructor(container.Resolve<IC>("ForA")))
.RegisterType<IB, B>(new InjectionConstructor(container.Resolve<IC>("ForB")));
答案 1 :(得分:0)
我过去通过装饰/设置公共接口来完成这项工作,以便为映射识别它们。
// new interface just for A
public interface ICforA : IC { }
// new interface just for B
public interface ICforB : IC { }
container = new UnityContainer()
.RegisterType<IA, A>()
.RegisterType<IB, B>()
.RegisterType<ICforA, C>(new InjectionConstructor(strA));
.RegisterType<ICforB, C>(new InjectionConstructor(strB));
免责声明:代码是从内存而不是Visual Studio编写的。