1

假设我有两个接口 IFirst 和 ISecond,它们都有几个实现,例如 FirstClassForMe、FirstClassForYou、SecondClassForMe、SecondClassForYou。

我想在 IoC 容器中注册它们(无论哪种生活方式):

this.container.Register(
    Component.For<IFirst>().ImplementedBy<FirstClassForMe>().Named("Me"),
    Component.For<IFirst>().ImplementedBy<FirstClassForYou().Named("You"), 
    Component.For<ISecond>().ImplementedBy<SecondClassForMe>).Named("Me"),
    Component.For<ISecond>().ImplementedBy<SecondClassForYou>().Named("You"))

我想按如下方式使用它:

var forWho = this.GetCode();
var first = this.Container.Resolve<IFirst>(forWho);
var second = this.Container.Resolve<ISecond>(forWho);
this.Work(first, second);

但在温莎,我得到一个 ComponentRegistrationException

组件 Me 无法注册。已经有一个具有该名称的组件。您是否想修改现有组件?如果不是,请确保指定一个唯一名称。

但是,我相信,只要对(接口;代码)对于每个注册都是唯一的,就可以解决这种依赖关系。是否可以根据这种情况使温莎工作?例如,查找 IFirst 的所有注册,然后按名称选择一个。

4

1 回答 1

-1

Windsor 的服务覆盖将适用于您想做的事情。

于 2012-05-11T16:40:05.050 回答