C# 静态属性和构造函数注入潜在内存泄漏
我有一个在启动时运行的引导程序任务。我得到一个对象,一个单例,注入到构造函数中,然后我为这个对象设置了一个静态属性。这会不会导致boostrapper类不是GCdC# 静态属性和构造函数注入潜在内存泄漏,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
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
,因此不会进行垃圾收集