静态属性和构造函数注入潜在的内存泄漏

时间:2019-05-12 23:34:15

标签: c# asp.net-core .net-core

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

1 个答案:

答案 0 :(得分:3)

如果有对您的实例化类的引用,

Local.LanguageLocaliser = languageLocaliser // reference 

然后引用计数将大于0,因此将不会收集垃圾