我有一个启动时运行的引导程序任务。我将一个对象(单例)注入到构造函数中,然后为此对象设置静态属性。这会导致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>
被注入到构造函数languageLocaliser
中,该构造函数引用DI容器中的对象。 Local
静态类然后引用languageLocaliser
,它是BootstrapperTask
的一部分。因为Local
是静态的,并且将持续到应用程序结束,这是否意味着由于BootstrapperTask
指向Local
而无法清除languageLocaliser
吗? 最佳答案
如果有对您的实例化类的引用,
Local.LanguageLocaliser = languageLocaliser // reference
然后引用计数将大于
0
,因此将不会收集垃圾