Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 静态属性和构造函数注入潜在内存泄漏_C#_Asp.net Core_.net Core - Fatal编程技术网

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

C# 静态属性和构造函数注入潜在内存泄漏,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我有一个在启动时运行的引导程序任务。我得到一个对象,一个单例,注入到构造函数中,然后我为这个对象设置了一个静态属性。这会不会导致boostrapper类不是GCd public class BootstrapperTask : IStartupTask { public BootstrapperTask ( ILocaliser<string> languageLocaliser ) { //here I set the

我有一个在启动时运行的引导程序任务。我得到一个对象,一个单例,注入到构造函数中,然后我为这个对象设置了一个静态属性。这会不会导致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
    }
}
公共类引导任务:IStarutTask
{
公共引导任务
(
ILocaliser语言本地化器
)
{
//这里我设置了static属性
Local.LanguageLocaliser=LanguageLocaliser;
}
公共异步任务ExecuteAsync(CancellationToken CancellationToken=默认值)
{
//执行启动操作
}
}

singleton
ILocaliser
被注入构造函数
languageLocaliser
,该构造函数引用DI容器中的对象
Local
static类然后引用
languageLocaliser
,它是
BootstrapperTask
的一部分。由于
Local
是静态的,将一直持续到应用程序结束,这是否意味着
BootstrapperTask
无法清理,因为
Local
指向
languageLocaliser

如果存在对实例化类的引用

Local.LanguageLocaliser = languageLocaliser // reference 
然后引用计数将大于
0
,因此不会进行垃圾收集