AddTransientAddSingletonAddScoped的区别
Posted anang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AddTransientAddSingletonAddScoped的区别相关的知识,希望对你有一定的参考价值。
权重:
AddSingleton→AddTransient→AddScoped
AddSingleton的生命周期:
项目启动-项目关闭 相当于静态类 只会有一个
AddScoped的生命周期:
请求开始-请求结束 在这次请求中获取的对象都是同一个
AddTransient的生命周期:
请求获取-(GC回收-主动释放) 每一次获取的对象都不是同一个
控制器
[HttpGet] public IActionResult SetTest() { sing.Age = 18; sing.Name = "小红"; tran.Age = 19; tran.Name = "小明"; scon.Age = 20; scon.Name = "小蓝"; aService.RedisTest(); return Json("OK"); }
注入
public static void AddTestTran(this IServiceCollection service) { service.AddTransient<ITranTest, TranTest>(); service.AddSingleton<ISingTest, SingTest>(); service.AddScoped<ISconTest, SconTest>(); service.AddScoped<IAService, AService>(); }
服务:
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
不然则会抛如下异常
以上是关于AddTransientAddSingletonAddScoped的区别的主要内容,如果未能解决你的问题,请参考以下文章