当前位置: 首页 > news >正文

ASP.NET Core 依赖注入的三种服务生命周期

前言

依赖注入(Dependency Injection, DI) 是一种实现控制反转(Inversion of Control, IoC) 的软件设计模式,也是构建松耦合、可测试、易维护应用程序的核心技术。其核心理念是:不要在类内部创建依赖,而是由外部容器将依赖注入进来。

在现代 ASP.NET Core 中内置了强大的 DI 容器,正确使用 DI 的关键在于理解 Transient、Scoped 和 Singleton 这三种服务生命周期,它们决定了服务实例的创建时机、共享范围与生命周期。本文将清晰解析三者的区别和适用场景。

简单概述

在 ASP.NET Core 中,依赖注入容器通过IServiceCollection支持三种服务注册生命周期:

IServiceCollection 是 .NET 依赖注入(DI)系统中的核心接口之一,用于注册和管理应用程序所需的服务。

生命周期注册方法实例创建时机共享范围
Transient(瞬态) AddTransient<T>() 每次请求都创建新实例 不共享
Scoped(作用域) AddScoped<T>() 每个作用域(如 HTTP 请求)创建一次 在同一作用域内共享
Singleton(单例) AddSingleton<T>() 应用启动时创建一次(或首次使用时) 整个应用生命周期共享

选型口诀

  • 跨请求共享、需复用 → Singleton(线程安全要做好)
  • 请求内共享、一致性、上下文传递 → Scoped
  • 一次性、无状态、轻量 → Transient

Transient(瞬态)

每次从 DI 容器请求服务时,都会创建一个全新的实例

适用场景

  • 轻量级、无状态的服务。
  • 请求级独立状态:每次调用需要独立状态或副作用隔离的组件。
  • 短生命周期依赖链:依赖链中各服务都很轻、无共享资源的场景。

Scoped(作用域)

同一个作用域内共享同一个实例,不同作用域创建不同实例。

在 ASP.NET Core 中,每个 HTTP 请求就是一个作用域

适用场景

  • 需要在单次请求中共享状态的服务。
  • 数据库上下文(DbContext):AddDbContext() 默认注册为 Scoped,保证同一 HTTP 请求内复用同一个数据库上下文,避免实体跟踪混乱、重复连接开销,并支持事务一致性。
  • 工作单元(Unit of Work)与数据仓储(Repository):与 DbContext 同生命周期,保障查询→修改→提交的一致性,并减少资源创建销毁。

Singleton(单例)

整个应用程序生命周期内只创建一次实例,所有请求共享同一个对象。

适用场景

  • 无状态、线程安全的全局服务(如工具类、映射器)。
  • 配置封装服务(如 IAppSettings),启动后内容不变。
  • 全局缓存(如 IMemoryCache),需跨请求共享数据。

参考文章

  • https://learn.microsoft.com/zh-cn/dotnet/core/extensions/dependency-injection#service-lifetimes
http://www.jsqmd.com/news/140053/

相关文章:

  • 2026年信创产业全景深度剖析:利唐 i 人事、用友、红海云谁来领跑新纪元?
  • swagger 接口参数字段错误
  • 洛谷 P2602:[ZJOI2010] 数字计数 ← 数位DP
  • 详细介绍:洛谷 P1330:封锁阳光大学 ← 染色法 + 二分图
  • 一文读懂供应链、采购、运输、分销、配送的区别与协作逻辑
  • 光影向善,大爱无界!第44届华鼎奖好莱坞揭晓 安吉丽娜·朱莉榜上有名
  • PCIe-Tag Rule
  • 数据库运维基础从环境搭建到故障处理实战
  • EHR+AI助手:远程办公模式下HR与IT的合规协同方案
  • 支持灵活二次开发的 BI 工具首选!观远数据以开放架构赋能企业定制化需求
  • 2025最新!9个AI论文平台测评:本科生毕业论文写作全攻略
  • 解决 EasyExcel 首次导出耗时过长问题
  • SNP曼哈顿图绘制 - 指南
  • 2025HR数字化转型核心:IT驱动的人才敏捷性构建路径
  • 日总结 45
  • MySQL 知识点:函数索引(Functional Index)
  • 亿可达_自动发邮件攻略
  • 基于TCP/IP 通信,服务端主动召测客户端:高并发、高可用任务缓存队列框架设计(第三章)
  • SQL学习应用工作场景(2)--执行优先级+语法顺序+保留2位小数
  • 论文救星!9款免费AI生成器1天搞定,文理医工全覆盖必备
  • Linux系统相关知识
  • 工程BOM、制造BOM、成本BOM有什么区别?三套 BOM 各自解决什么问题?
  • 首尔大学团队揭秘:为什么AI绘画总是用“高斯分布“?
  • 好用的厦门考研公司
  • 记录2025年用AI编程干了哪些出格的事情
  • Kyutai团队的新突破:让AI看图片更便宜的神奇方法
  • 2025下半年软考纸质证书领取时间表来啦!
  • Scala 数组
  • cesium 根据经纬度高度进行额度补偿
  • 从概念到实践,带你彻底搞懂AI智能体