Unity容器对象解析层次结构

时间:2011-06-08 07:57:38

标签: c# dependency-injection unity-container containers

我的容器配置如下:

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有没有正确的方法来实现这一目标?

由于

2 个答案:

答案 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编写的。