c# - DI Singleton 实例与 Transient 实例

标签 c# .net dependency-injection inversion-of-control

几年前,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/

相关文章:

java - JSR 330 和 Guice 互操作性

c# - 通过依赖注入(inject)在主窗体中初始化接口(interface)

c# - 想在 WP7 应用程序中单击和双击图像

c# - SQLite-Net 扩展和文件模型

c# - 3D WPF 中的最近邻图像采样

javascript - 使用 Node.js 进行依赖注入(inject)

c# - Silverlight/WPF : I Don't Want ICommand to Change Button's IsEnabled Property, 这可能吗?

C# Hangman 游戏错误

c# - 每个托管线程是否都有自己对应的 native 线程?

c# - WCF:客户端调用方法,但不返回