我有一个启动时运行的引导程序任务。我将一个对象(单例)注入到构造函数中,然后为该对象设置静态属性。这会导致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
?
答案 0 :(得分:3)
如果有对您的实例化类的引用,
Local.LanguageLocaliser = languageLocaliser // reference
然后引用计数将大于0
,因此将不会收集垃圾