gpt4 book ai didi

c# - 温莎城堡 : Will my transient component be garbage collected?

转载 作者:太空狗 更新时间:2023-10-29 21:15:58 24 4
gpt4 key购买 nike

使用 CaSTLe Windsor,我有一个配置了 transient 生活方式的组件:

<component id="publish.mapping.default"
service="IMyService, MyAssembly"
type="MyServiceImplementation, Myassembly"
lifestyle="transient" />

将像这样使用:

var service = container.Resolve<IMyService>(componentId);
// service usage ....
// service goes out of scope ...

我的问题是,服务实例在超出范围后会被垃圾回收,还是 CaSTLe Windsor 会保留引用?我找到了 this similar question ,这意味着后者可能是这种情况——但在检查了那里发布的链接之后,我不确定讨论是关于保留引用,还是关于确保对象在实现 IDisposable 时被处置。我的对象不需要处理。

如果 CaSTLe Windsor 持有实例,是否有任何简单的方法来防止这种情况(可能通过配置)?

编辑
看来,我需要设置发布跟踪策略。这可以在 xml 配置文件中配置,还是需要在代码中设置?可以在每个组件的基础上设置发布跟踪策略吗?

最佳答案

默认情况下,容器包含对您的对象(即使是临时对象)的引用。

但是,正如@Bittercoder 在 Why does Castle Windsor hold onto transient objects? 中指出的那样, 你可以 change the release tracking policy .看来选择

LifecycledComponentsReleasePolicy:

var policy = container.Kernel.ReleasePolicy;
container.Kernel.ReleasePolicy = LifecycledComponentsReleasePolicy;

但自从提出问题以来,这似乎已成为默认策略。

关于c# - 温莎城堡 : Will my transient component be garbage collected?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/578593/

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