几年前,IoC 性能指南指出,IoC 容器应仅用于解析长期实例(基本上是单例),而应使用单例工厂(由容器保存)创建 transient 类型对象。
我现在正在阅读有关 ASP.NET Core 的内容,我看到的几个示例对其注入(inject)的对象使用 transient 生命周期。现在 transient 是提供静态方法(并且无状态)的服务的首选方法,是否发生了变化?
最佳答案
“长寿实例”的概念并没有说明它们的生命周期或生活方式,而是从消费者的角度来看,它们只有一个实例。他们无国籍。
换句话说,“长期实例”是指服务或依赖项,而“短期实例”是指以数据为中心的对象,例如实体、DTO、消息和 View 模型。
这些服务由您的 Composition Root 创建和管理(通常是,但不一定是 DI 容器),而以数据为中心的对象由应用程序代码直接管理。换句话说,那些“长期存在的对象”由组合根“更新”,而“短期对象”由应用程序代码本身更新。
这些以数据为中心的对象是不稳定的,它们通常只在请求期间(甚至更短)存在,尽管它们可能会被缓存并在应用程序存在期间一直存在。
依赖关系也可以存在很短的持续时间,但通常是在请求的持续时间内。
关于c# - DI Singleton 实例与 Transient 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48287571/