Dependency injection 温莎城堡儿童集装箱
如果未通过parent.RemoveChildContainerchild从父容器中显式删除子容器,windsor将在什么情况下处置/删除子容器?我假设它们将无限期地生活在父容器的子容器集合中,而不考虑父容器之外的引用。是否有人对此进行了测试或对此有所了解?WindsorContainer实现了IDisposable,并且在处置子容器时将从其父容器中移除该子容器: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;
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();
}
}
}