2011-05-24 121 views
3

我有一个接口,2个类正在使用这个接口。我正在使用统一配置来识别基于接口的实例。如何注册实现相同接口的多种类型

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

+0

对不起,我不明白你的问题。但是您只能访问界面中定义的成员。请发布一些关于此的代码。 – sra 2011-05-24 11:10:42

回答

-4

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

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

例如

你有

ClassA的:iCLASS非和 ClassB的:ICLASS吧?

所以,它会像; ClassA:IClassA,ClassB:IClassB和IClassA:IClass,IClassB:IClass,注册IClassA用于ClassA,IClassB用于ClassB。

输入参数

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

解决IClass>(“TypeA”);
解决IClass>(“TypeB”);

有意义吗?

+0

在企业库HOL中有一个例子,我们可以通过在注册类型时使用name属性来区分这些引用。我会检查出来,并回复给你.. – Saravanan 2011-05-25 03:03:00

+0

修改我的帖子输入参数,如果这就是你在说什么。 – apprich 2011-05-29 20:41:58

+0

我认为这是一个非常令人困惑的问题答案。 – youwhut 2011-09-22 17:34:40

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

我在类型上使用公共静态只读属性来访问其名称。 – JoanComasFdz 2012-11-20 15:45:50

相关问题