如果没有通过parent.RemoveChildContainer(child)从父容器中显式删除子容器,那么windsor会在什么条件下处理/删除子容器?我假设它们将无限期地存在于父级子容器集合中,而不管父级之外是否存在引用。有人测试过这个或者在这里有一些见解吗?
答案 0 :(得分:0)
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;
MyService还将实现IDisposable:
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();
}
}
}
确实,你如何使用儿童容器可能会有很大不同。我只是想分享一些经验:)