我有一个启动时运行的引导程序任务。我将一个对象(单例)注入到构造函数中,然后为此对象设置静态属性。这会导致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,因此将不会收集垃圾

10-01 23:18