.NetCore【依赖注入:AddTransient、AddSingleton、AddScoped的区别 】
service.AddTransient<ITranTest, TranTest>(); service.AddSingleton<ISingTest, SingTest>(); service.AddScoped<ISconTest, SconTest>();
一、使用方式
service.AddTransient<ITranTest, TranTest>(); service.AddSingleton<ISingTest, SingTest>(); service.AddScoped<ISconTest, SconTest>();
二、生命周期
权重:
AddSingleton→AddTransient→AddScoped
AddSingleton的生命周期:
项目启动-项目关闭 相当于静态类 只会有一个
AddScoped的生命周期:
请求开始-请求结束 在这次请求中获取的对象都是同一个
AddTransient的生命周期:
请求获取-(GC回收-主动释放) 每一次获取的对象都不是同一个
控制器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[HttpGet] public IActionResult SetTest() { sing.Age = 18; sing.Name = "小红" ; tran.Age = 19; tran.Name = "小明" ; scon.Age = 20; scon.Name = "小蓝" ; aService.RedisTest(); return Json( "OK" ); } |
注入
1
2
3
4
5
6
|
public static void AddTestTran( this IServiceCollection service) { service.AddTransient<ITranTest, TranTest>(); service.AddSingleton<ISingTest, SingTest>(); service.AddScoped<ISconTest, SconTest>(); service.AddScoped<IAService, AService>(); } |
服务:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class AService: IAService { private ISingTest sing; ITranTest tran; ISconTest scon; public AService(ISingTest sing, ITranTest tran, ISconTest scon) { this .sing = sing; this .tran = tran; this .scon = scon; } public void RedisTest() { } } |
AddSingleton的对象没有变
AddScoped的对象没有变化
AddTransient的对象发生变化
------------------------------------------------------------
请求get
AddSingleton的对象没有变
AddScoped的对象发生变化
AddTransient的对象发生变化
注意:
由于AddScoped对象是在请求的时候创建的
所以不能在AddSingleton对象中使用
甚至也不能在AddTransient对象中使用
所以权重为
AddSingleton→AddTransient→AddScoped
不然则会抛如下异常
原文地址:https://www.cnblogs.com/AnAng/p/9370913.html
分类:
Core
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)