news 2026/4/23 11:46:13

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/4/17 0:56:21

好写作AI:从零到终稿!你的“论文外挂”已一键配置

如果把写论文比作一场游戏&#xff0c;那你之前可能一直在“困难模式”里裸奔。“从零到终稿”这条路&#xff0c;对多数人来说&#xff0c;堪比一场充满未知陷阱的冒险&#xff1a;开局一张空白文档&#xff0c;装备全靠自己手搓&#xff0c;BOSS&#xff08;导师&#xff09;…

作者头像 李华
网站建设 2026/4/10 14:39:19

Chaos Mesh深度实战:构建坚不可摧的云原生系统架构

Chaos Mesh深度实战&#xff1a;构建坚不可摧的云原生系统架构 【免费下载链接】chaos-mesh 项目地址: https://gitcode.com/gh_mirrors/cha/chaos-mesh 从系统脆弱性到工程韧性的转变之旅 在微服务架构盛行的今天&#xff0c;我们的系统变得越来越复杂&#xff0c;同…

作者头像 李华
网站建设 2026/4/17 1:16:59

OpenSim肌肉骨骼模拟系统:从生物力学到智能优化的完整指南

OpenSim肌肉骨骼模拟系统&#xff1a;从生物力学到智能优化的完整指南 【免费下载链接】opensim-core SimTK OpenSim C libraries and command-line applications, and Java/Python wrapping. 项目地址: https://gitcode.com/gh_mirrors/op/opensim-core 你是否曾好奇顶…

作者头像 李华
网站建设 2026/4/22 20:51:32

论文双重“安检”:智能降重如何破解查重与AIGC检测的双重焦虑

毕业论文提交前的最后一步——查重&#xff0c;长久以来是悬在每位毕业生心头的“达摩克利斯之剑”。而如今&#xff0c;这把剑变成了双刃&#xff1a;一面是传统文本重复率的严苛标准&#xff0c;另一面是各高校陆续引入的AIGC检测系统对人工智能生成内容的筛查。 数据显示&am…

作者头像 李华
网站建设 2026/4/22 21:34:45

SMBus协议主机发送模式帧结构解析

深入理解 SMBus 主机发送模式&#xff1a;从帧结构到实战配置你有没有遇到过这样的场景&#xff1f;系统上电后&#xff0c;电源模块没有按预期输出电压&#xff1b;或者电池管理芯片始终无法进入充电状态。排查一圈硬件没问题&#xff0c;示波器抓波形也看到通信了——但数据就…

作者头像 李华
网站建设 2026/4/13 5:32:18

CANoe中UDS 19服务响应机制的核心要点

深入理解CANoe中UDS 19服务的响应机制&#xff1a;从原理到实战 在汽车电子系统日益复杂的今天&#xff0c;诊断功能早已不再是售后维修的“附属品”&#xff0c;而是贯穿整车开发、测试验证乃至生命周期管理的核心能力。作为UDS&#xff08;统一诊断服务&#xff09;协议中的关…

作者头像 李华