假设我有两个接口 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 的所有注册,然后按名称选择一个。