统一容器-如何注册实现同一接口的多个类型



我有一个单独的接口,这被两个类使用。我使用统一配置来识别基于接口的实例。

现在我想知道我应该如何注册这些类型,以便能够基于单个接口本身调用适当的实现。

我就是这样做的:

        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")));

您应该注册任何您想要的类型的实例。若你们为同一个接口注册了两种类型,你们就得到了唯一的一种。每个类型有一个接口,或者您为注册的类型提供输入参数。它就像一个容器,你可以把你的东西放进去,随时用正确的钥匙把它拿回来。

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

例如

你有

A类:I类和B级:I级,对吧?

所以,它会像;ClassA:IClassA、ClassB:IClassB和IClassA:ICClass、IClassB:IClass,并为ClassA注册IClassA,为ClassB注册IClassB。

输入参数

RegisterType IClass,ClassA>("TypeA")
RegisterType IClass,ClassB>("TypeB")

解析IClass>("TypeA")
解析IClass>("TypeB");

有道理吗?

最新更新