gpt4 book ai didi

caSTLe-windsor - 温莎 : How can I make windsor dispose a transient component when not tracking component lifecycle?

转载 作者:行者123 更新时间:2023-12-04 06:52:04 25 4
gpt4 key购买 nike

我们在 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;
}
}

最后一个测试将这些组件配置为 transient 并解决/释放它们:
    [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 将按预期处理 transient 服务,但我不能这样做(期间)。现在,我想要实现的是,当我调用 ReleaseCompnent 时,Windsor 会处理 transient 组件(解析图中的任何位置)。有没有办法在不改变 NoTrackingReleasePolicy 的情况下实现这一目标?

最佳答案

不,你不能一边吃蛋糕一边吃。
您可以实现自己的自定义策略,类似于 NoTrackingReleasePolicy 但会跟踪某些组件...

关于caSTLe-windsor - 温莎 : How can I make windsor dispose a transient component when not tracking component lifecycle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2972053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com