Sli*_*ind 3 castle-windsor ioc-container
我正在尝试从一组基本注册中分支出多个子容器,以便于进行不同的配置设置。
我认为根据Mark Seemanns 关于子容器如何工作的回复,我可以使用子容器来覆盖基本注册中的特定组件。然而我似乎并不像西曼所说的那样工作。
根据马克的说法,这应该有效:
[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
}
Run Code Online (Sandbox Code Playgroud)
然而,所有依赖关系显然都是从父级解决的。
如果我从parentContainer 中删除IBasicComponent 注册,由于缺少注册,我什至无法解决依赖关系。
谁能解释一下如何让容器像 Seemann 声称的那样运行,或者 WindsorContainer 真的无法以优雅的方式处理这种类型的配置吗?
您所指的行为曾经在旧的温莎版本中起作用,但在较新的版本中发生了变化。
基本上这是一个错误,它允许子容器中的组件在其范围之外可见(当组件表单父级依赖于子级组件时)
因此,依赖关系可以从子级 --> 父级,但反之则不然。
| 归档时间: |
|
| 查看次数: |
739 次 |
| 最近记录: |