尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

ASP.NET Core 依赖注入的三种服务生命周期
📅 发布时间:2026/6/20 16:59:10

前言

依赖注入(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

作者名称:追逐时光者

作者简介:一个热爱编程、善于分享、喜欢学习、探索、尝试新事物和新技术的全栈软件工程师。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【♥推荐♥】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确的地方,欢迎指正或补充,不胜感激。

相关新闻

  • 一文读懂供应链、采购、运输、分销、配送的区别与协作逻辑
  • EHR+AI助手:远程办公模式下HR与IT的合规协同方案
  • 数据库运维基础从环境搭建到故障处理实战

最新新闻

  • GLM-5.1 Coding Plan 调用指南:信用机制、OpenAPI 直连与避坑配置
  • Mac本地大模型实战指南:Ollama+Metal+Apple Silicon深度优化
  • 暗黑破坏神2存档编辑器完整指南:三步轻松定制你的D2/D2R游戏体验
  • 2026年评价高的山东HL提升机/提升机料斗/山东提升机链轮厂家精选合集 - 品牌宣传支持者
  • Kimi API开源能力解析与工程化接入实战指南
  • 【JAVA毕设源码分享】springboot基于敏捷开发的项目管理系统(程序+文档+代码讲解+一条龙定制)

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号