如何注册实现相同接口的多种类型

时间:2011-05-24 11:01:59

标签: unity-container enterprise-library

我有一个接口,2个类正在使用它。我正在使用统一配置来根据接口识别实例。

现在我想知道如何注册这些类型,以便我可以根据单个接口本身调用适当的实现。

2 个答案:

答案 0 :(得分:6)

我就是这样做的:

        var container = new UnityContainer().RegisterType<IAmImplementedMoreThanOnce, Implementation1>("Implementation1")
                                            .RegisterType<IAmImplementedMoreThanOnce, Implementation2>("Implementation2")
                                            .RegisterType<IHaveDependencies1, WithDependenciesImplementation1>(new InjectionConstructor(new ResolvedParameter<IAmImplementedMoreThanOnce>("Implementation1")))
                                            .RegisterType<IHaveDependencies2, WithDependenciesImplementation2>(new InjectionConstructor(new ResolvedParameter<IAmImplementedMoreThanOnce>("Implementation2")));

答案 1 :(得分:-4)

你应该注册你想要的任何类型的实例。如果为同一个界面注册两种类型,则只能获得一种类型。每种类型都有一个接口,或者为您注册的类型提供输入参数。 它就像容器,你把你的东西放进去,并随时用正确的钥匙取回。

您可以为从父接口派生的两种类型创建另外两个接口,并为这两种类型注册这两个接口,或者使用输入参数。

e.g。

你有

ClassA:IClass和 ClassB:IClass对吗?

所以,它会是这样的; ClassA:IClassA,ClassB:IClassB和IClassA:IClass,IClassB:Classlass的IClass和寄存器IClassA以及ClassB的IClassB寄存器。

输入参数

RegisterType IClass,ClassA&gt;(“TypeA”);
RegisterType IClass,ClassB&gt;(“TypeB”);

解析IClass&gt;(“TypeA”);
解析IClass&gt;(“TypeB”);

有意义吗?