3

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

根据Mark Seemanns 关于子容器如何工作的回复,我认为我可以使用子容器来覆盖基本注册中的特定组件。然而,我似乎不像 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 真的无法以优雅的方式处理这种类型的配置?

4

1 回答 1

4

您所指的行为曾经在旧温莎版本中工作,但在更新的版本中有所改变。

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

因此,允许依赖项来自子项 --> 父项,但不能相反。

于 2013-02-22T02:41:20.093 回答