温莎城堡 3.0 具有相同名称的不同服务 - 如何

本文关键字:服务 如何 城堡 | 更新日期: 2023-09-27 18:33:50

假设我有两个接口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);

但是在温莎,我得到了一个组件注册异常

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

但是,我相信,对于

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

温莎城堡 3.0 具有相同名称的不同服务 - 如何

温莎的服务覆盖将适用于您想要做的事情。