我有一个在启动时运行的 Bootstrap 任务。我得到一个对象,一个单例,注入(inject)到构造函数中,然后我为这个对象设置了一个静态属性。这会导致 boostrapper 类不是 GCd 吗?
public class BootstrapperTask : IStartupTask
{
public BootstrapperTask
(
ILocaliser<string> languageLocaliser
)
{
//here I set the static property
Local.LanguageLocaliser = languageLocaliser;
}
public async Task ExecuteAsync(CancellationToken cancellationToken = default)
{
// perform startup actions
}
}
单例 ILocaliser<string>
被注入(inject)到构造函数中,languageLocaliser
,它引用 DI 容器中的对象。 Local
静态类然后引用 languageLocaliser
这是 BootstrapperTask
的一部分.因为Local
是静态的,会一直存在到应用程序结束,这是否意味着 BootstrapperTask
由于 Local
无法清理指向 languageLocaliser
?
最佳答案
如果有对你的实例化类的引用,
Local.LanguageLocaliser = languageLocaliser // reference
然后引用计数将大于0
,因此不会被垃圾回收
关于c# - 静态属性和构造函数注入(inject)潜在的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56104304/