Dependency injection 温莎城堡儿童集装箱

Dependency injection 温莎城堡儿童集装箱,dependency-injection,castle-windsor,ioc-container,Dependency Injection,Castle Windsor,Ioc Container,如果未通过parent.RemoveChildContainerchild从父容器中显式删除子容器,windsor将在什么情况下处置/删除子容器?我假设它们将无限期地生活在父容器的子容器集合中,而不考虑父容器之外的引用。是否有人对此进行了测试或对此有所了解?WindsorContainer实现了IDisposable,并且在处置子容器时将从其父容器中移除该子容器: public virtual void Dispose() { Parent = null;

如果未通过parent.RemoveChildContainerchild从父容器中显式删除子容器,windsor将在什么情况下处置/删除子容器?我假设它们将无限期地生活在父容器的子容器集合中,而不考虑父容器之外的引用。是否有人对此进行了测试或对此有所了解?

WindsorContainer实现了IDisposable,并且在处置子容器时将从其父容器中移除该子容器:

    public virtual void Dispose()
    {
        Parent = null;
        childContainers.Clear();
        kernel.Dispose();
    }
何时处置取决于具体实施。例如,如果每次在Winform应用程序上打开新表单时都创建一个子容器,则可以在表单关闭时处置它。另一个例子是,当我为每个web请求创建子容器时:

Component.For<IMyService>().UsingFactoryMethod(k =>
            {
                var childContainer = new WindsorContainer() { Parent = parentContainer };
                return new MyService(childContainer);

            }).LifeStyle.PerWebRequest;

实际上,您使用子容器的方式可能非常不同。我只是想分享一些经验:

是的,这都是事实。我只是好奇内核内部是否有任何东西可以自动处理子容器,而其他任何东西都没有引用。我相当肯定答案是否定的,但我不确定CW是否对不再使用的儿童容器进行了任何内部清理。
public class MyService : IMyService, IDisposable
{
    public MyService(IWindsorContainer container)
    {
       ...
    }

    public void Dispose()
    {
        this.Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
        {
            this.container.Dispose();
        }
    }
}