gpt4 book ai didi

c# - DI Singleton 实例与 Transient 实例

转载 作者:太空宇宙 更新时间:2023-11-03 19:44:17 24 4
gpt4 key购买 nike

几年前,IoC 性能指南指出 IoC 容器应该只用于解析长期存在的实例(基本上是单例),而 transient 类型对象应该使用单例工厂(由容器持有)创建。

我现在正在阅读有关 ASP.NET Core 的内容,以及我看到的几个示例将 Transient 生命周期用于注入(inject)的对象。 transient 现在是提供静态方法(并且是无状态的)服务的首选方法,是否发生了一些变化?

最佳答案

“长生命周期实例”的概念并没有说明它们的生命周期或每次看到的生活方式,而是从消费者的角度来看,它们只有一个实例。他们无国籍

换句话说,“长生命周期实例”是指服务依赖,而“短生命周期实例”是指以数据为中心的对象,例如实体、DTO、消息和 View 模型。

这些服务由您的 Composition Root 创建和管理(通常,但不一定是您的 DI 容器),而以数据为中心的对象由应用程序代码直接管理。换句话说,那些“长期存在的对象”是由组合根“更新”的,而“短期存在的对象”是由应用程序代码本身更新的。

那些以数据为中心的对象是易变的,它们通常只在请求的持续时间内存在(甚至更短),尽管它们可能会被缓存并在应用程序存在时一直存在。

依赖项也可以存在很短的时间,但通常是在请求期间存在。

关于c# - DI Singleton 实例与 Transient 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48287571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com