专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

AddTransient、AddSingleton、AddScoped的区别

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:44:07       共计:3639 浏览

权重:

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

 

不然则会抛如下异常

 

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:ASP.NET Core - 基于IHttpContextAccessor实现系统级别身份标识 | ·下一条:Git 如何使用

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有