【发布时间】:2012-05-11 15:46:36
【问题描述】:
假设,我有两个接口 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 的所有注册,然后按名称选择一个。
【问题讨论】:
标签: c# .net castle-windsor ioc-container