Castle Windsor不会解决来自子容器的属性,而是来自父

时间:2017-03-14 18:30:23

标签: c# castle-windsor

我正在遍历树的深度优先,我想为每个级别创建一个新的子容器,其中一些值只能从一个级别下来解析。我们有这个设置代码:

class Processor<T> {
    public T Item { get; set; }
}

class SomeProcessor: Processor<Thing> { }
class OtherProcessor: Processor<Blah> { }

var container = new WindsorContainer();
container.Register(Component.For<Processor<Thing>>().ImplementedBy<SomeProcessor>().LifestyleTransient());
container.Register(Component.For<Processor<Blah>>().ImplementedBy<OtherProcessor>().LifestyleTransient());

然后我用这种方法遍历任何对象的树:

void Process(Type type, object item, IWindsorContainer container) {
    using(var childContainer = new WindsorContainer()) {
        container.AddChildContainer(childContainer);
        childContainer.Register(Component.For(type).Instance(item));
        var resolved = childContainer.Resolve(typeof(Processor<>).MakeGenericType(type));

        //eventually:
        foreach(var subItem in otherItemsUnderCurrentItem) {
             Process(subItem.GetType(), subItem, childContainer);
        }
        container.RemoveChildContainer(childContainer);
    }
}

如果需要将类型作为构造函数,则表明组件具有无法满足的依赖性。如果它只是一个参数,则它为空。

如果我只是更改为container.Register(Component.Form(type).Instance(item));一切都正确解析 - 不同之处在于我将其注册在父容器而不是我正在解析的容器上。

这是该框架的正确方法吗?

0 个答案:

没有答案
豫ICP备18024241号-1