【发布时间】:2010-06-04 06:52:59
【问题描述】:
我们在 Windsor 容器上使用 NoTrackingReleasePolicy,因为在使用后不释放组件时会发生内存泄漏。现在考虑以下问题。
一些一次性组件:
public class DisposableComponent : IDisposable
{
private bool _disposed;
public bool Disposed
{
get { return _disposed; }
}
public void Dispose()
{
_disposed = true;
GC.SuppressFinalize(this);
}
}
一些使用一次性组件的类:
public class ClassWithReferenceToDisposableService
{
private DisposableComponent _disposableComponent;
public ClassWithReferenceToDisposableService(DisposableComponent disposableComponent)
{
_disposableComponent = disposableComponent;
}
}
最后是一个将这些组件配置为瞬态并解决/释放它们的测试:
[Test]
public void ReleaseComponent_ServiceWithReferenceToTransientDisposable_TransientComponentDisposed()
{
// arrange
var windsorContainer = new WindsorContainer();
windsorContainer.Kernel.ReleasePolicy = new NoTrackingReleasePolicy();
windsorContainer.Register(Component.For<ClassWithReferenceToDisposableService>().LifeStyle.Transient);
windsorContainer.Register(Component.For<DisposableComponent>().LifeStyle.Transient);
ClassWithReferenceToDisposableService service =
windsorContainer.Resolve<ClassWithReferenceToDisposableService>();
// act
windsorContainer.Release(service);
}
现在,如果我删除 NoTrackingReleasePolicy,Windsor 将按预期处置临时服务,但我不能这样做(期间)。现在,我想要实现的是,当我调用 ReleaseCompnent 时,Windsor 会处理瞬态组件(解析图中的任何位置)。有什么方法可以在不更改 NoTrackingReleasePolicy 的情况下实现这一目标?
【问题讨论】:
标签: castle-windsor