【发布时间】:2013-02-21 13:57:06
【问题描述】:
我正在尝试从一组基本注册中分支一些子容器,以便于进行不同的配置设置。
我认为基于Mark Seemanns reply on how child containers work,我可以使用子容器来覆盖基本注册中的特定组件。但是,我似乎不像 Seemann 所说的那样工作。
根据 Mark 这应该可以工作:
[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 真的无法以优雅的方式处理这种类型的配置吗?
【问题讨论】:
标签: castle-windsor ioc-container