我们在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将按预期处理临时服务,但我不能这样做(句点)。现在,我想要实现的是Windsor在调用ReleaseCompnent时处理瞬态组件(在解析图中的任何位置)。有没有办法在不改变NoTrackingReleasePolicy的情况下实现这个目标?
答案 0 :(得分:3)
不,你不能吃蛋糕也不能吃。 您可以实现自己的自定义策略,类似于NoTrackingReleasePolicy,但会跟踪某些组件......