【问题标题】:Castle Windsor 3.0 Different services with same names -- how?Castle Windsor 3.0 具有相同名称的不同服务——如何?
【发布时间】: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


    【解决方案1】:

    Windsor 的 Service Overrides 可以满足您的需求。

    【讨论】:

    • 您能否详细说明一下,就我看不出服务覆盖有什么帮助?
    • 重读后,听起来您想根据运行时确定的某个“值”来解析您的组件?像这样的东西对你有用吗:stackoverflow.com/questions/8941055/…
    • 我已经回复了你提到的问题。那里描述了我目前使用的内容,并且在我的答案的最后一句中也描述了我遇到的错误。
    • 我相信你的方法对我有用,但是对于这个简单的任务来说它看起来太复杂了,我会考虑一两天 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2013-07-25
    相关资源
    最近更新 更多