依赖注入单例到瞬态

时间:2019-05-24 06:12:20

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

如果我有一个以Transient注入的服务,但是它有一个对IMemoryCache的依赖关系,它以Singleton的形式注入到构造函数中,这会导致内存泄漏?由于对IMemoryCache的引用,因此似乎永远不会将临时服务作为GCd。是这样吗?

1 个答案:

答案 0 :(得分:2)

将单例注入瞬态无关紧要,每次都会获得一个新的瞬态服务实例,但是每次都会向其注入相同的单例。如果您不持有对瞬态服务的任何引用,则会被收集。

您可以在以下问题中了解有关单例,瞬态和作用域工作原理的信息:AddTransient, AddScoped and AddSingleton Services Differences?

更新

因为您的单例服务将在您的应用程序运行时存在第一次注入,所以它永远不会被收集。解析程序将始终完全引用该单例服务。但是,对瞬态服务的引用将不存在,因此即使保留了对单例的引用,也将对其进行垃圾收集,而对单例的垃圾收集并不取决于瞬态服务的寿命范围。

PS

如果要监视内存泄漏,请阅读以下内容: https://devblogs.microsoft.com/devops/diagnosing-memory-issues-with-the-new-memory-usage-tool-in-visual-studio/

相关问题