news 2026/9/15 4:49:17

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 13:58:43

线性回归 (Linear Regression):预测未来的“水晶球”

今天我们要聊的是机器学习里最基础、最经典的算法——线性回归 (Linear Regression)。 虽然它的名字听起来有点数学味&#xff0c;但其实它的核心思想非常简单&#xff0c;简单到你可能在小学就用过它。 如果你完全不懂算法&#xff0c;没关系。想象一下&#xff0c;你正在经营…

作者头像 李华
网站建设 2026/9/2 22:52:27

Qwen-Image-Edit-Rapid-AIO完整指南:4步快速生成专业级AI图像

Qwen-Image-Edit-Rapid-AIO完整指南&#xff1a;4步快速生成专业级AI图像 【免费下载链接】Qwen-Image-Edit-Rapid-AIO 项目地址: https://ai.gitcode.com/hf_mirrors/Phr00t/Qwen-Image-Edit-Rapid-AIO 想要快速创建高质量AI图像却苦于复杂的技术门槛&#xff1f;Qwen…

作者头像 李华
网站建设 2026/9/9 1:22:33

工业环境下W5500散热与防护设计:系统学习

工业环境下W5500的散热与防护实战设计&#xff1a;从芯片特性到系统可靠性在工业自动化和物联网快速发展的今天&#xff0c;嵌入式网络通信模块早已不再是“能联网就行”的简单功能单元。尤其是在PLC、远程I/O、环境监测等典型工业场景中&#xff0c;设备往往需要在高温、高湿、…

作者头像 李华
网站建设 2026/9/14 18:57:00

PDF补丁丁跨平台使用全攻略:Windows与Linux双系统如何完美运行

PDF补丁丁跨平台使用全攻略&#xff1a;Windows与Linux双系统如何完美运行 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱&#xff0c;可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档&#xff0c;探查文档结构&#xff0c;提取图片、转成图片等等 项目地址: ht…

作者头像 李华
网站建设 2026/9/13 6:58:36

PDF补丁丁跨平台终极指南:Windows与Linux完整使用教程

PDF补丁丁跨平台终极指南&#xff1a;Windows与Linux完整使用教程 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱&#xff0c;可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档&#xff0c;探查文档结构&#xff0c;提取图片、转成图片等等 项目地址: https://gi…

作者头像 李华
网站建设 2026/9/12 4:39:05

PaddlePaddle镜像如何设置GPU资源抢占策略

PaddlePaddle镜像如何设置GPU资源抢占策略 在现代AI开发平台和云原生环境中&#xff0c;多任务共享GPU资源已成为常态。然而&#xff0c;当一个高优先级的紧急模型训练任务突然提交时&#xff0c;却发现所有GPU都被低优先级实验任务占满——这种“关键任务卡住”的窘境&#xf…

作者头像 李华