WindsorContainers AddChildContainer真的这么糟糕吗?

时间:2013-02-21 13:57:06

标签: castle-windsor ioc-container

我正在尝试从一组基本注册中分支多个子容器,以便于进行不同的配置设置。

我认为基于Mark Seemanns reply on how child containers work我可以使用子容器来覆盖基本注册中的特定组件。然而,我似乎没有按照Seemann的说法工作。

据马克说,这应该有效:

[TestMethod]
public void OverrideRegistrationInParentContainer()
{
    //IBusinessComponent depends on IBasicComponent
    var parentContainer = new WindsorContainer();
    parentContainer.Register(Component.For<IBasicComponent>().ImplementedBy<BasicComponent>()); //Returns 42
    parentContainer.Register(Component.For<IBusinessComponent>().ImplementedBy<RealBusinessComponent>()); //Returns the result of IBasicComponent


    var childContainer = new WindsorContainer();
    childContainer.Register(Component.For<IBasicComponent>().ImplementedBy<BasicComponent2>()); //Returns 40

    parentContainer.AddChildContainer(childContainer);

    var service = childContainer.Resolve<IBusinessComponent>();
    Assert.AreEqual(40, service.GetBusinessValue()); //This fails with the actual value being 42
}

但是,所有依赖关系显然已从父级解析。

如果我从parentContainer中删除IBasicComponent注册,我甚至无法解决因缺少注册而导致的依赖关系。

任何人都可以解释如何使容器像Seemann声称的那样运行,或者WindsorContainer是否真的无法以优雅的方式处理这种类型的配置?

1 个答案:

答案 0 :(得分:4)

您所指的行为曾用于旧版Windsor版本,但在较新版本中已被更改。

基本上这是一个错误,它允许子容器中的组件在其范围之外可见(当组件形式父对子组件依赖于组件时)

因此允许依赖关系来自child - &gt;父母,但不是相反。

相关问题