首页 > Web开发 > 详细

简单理解.net 依赖注入的三种方式

时间:2021-06-01 15:34:41      阅读:20      评论:0      收藏:0      [点我收藏+]

前言 :.NET5.0 于2020年11月10日正式发布,它是3.1之后的 .NET Core 的下一个主要版本。微软将这个新版本命名为 .NET 5.0 而不是 .NET Core 4.0,其原因有两个:

          1、跳过了版本号4.x,以避免与 .NET Framework 4.x 混淆。

         2、从名称中删除了“ Core”,以强调这是.NET未来的主要实现。与 .NET Core 或 .NET Framework 相比,.NET 5.0 支持更多类型的应用程序和平台。

    ASP.NET Core 5.0 基于 .NET 5.0,但保留名称“ Core”以避免将其与 ASP.NET MVC 5 混淆。同样,Entity Framework Core 5.0保留名称“ Core”以避免将其与 Entity Framework5、Entity Framework6 混淆。

    微软称将来只会有一个.NET平台,使用它可以开发 Windows、Linux、macOS、iOS、Android、tvOS、watchOS和WebAssembly等平台的应用。.NET 5中引入了新的.NET API,运行时和语言功能。


众所周知,.net有自带的3种注入的方式,分别是AddScoped、AddSingleton、AddTransient,他们分别是请求内的,单例的,瞬时的作用,那么,究竟到底是什么意思呢,我这里做了一个简单的测试。
定义了如下测试类
技术分享图片
技术分享图片

技术分享图片

技术分享图片
然后首先测试一下AddScoped,要将第二个注释放开模拟同一个请求,然后我们每次请求Index,都会发现打印的是1,2,因为我请求了3次,所以会出现3次1,2

技术分享图片
技术分享图片
然后接着测试Singleton,同样将services.AddScoped<TestSvc>()改为  services.AddSingleton<TestSvc>(),因为是单例的,所以我们应该可以看到那个局部临时变量i已经不会自动释放了,会一直存在内存中并且累加,就类似变成了静态变量

技术分享图片
技术分享图片
最后测试AddTransient,改为  services.AddTransient<TestSvc>();每次请求都会从新实例,如下:

技术分享图片
技术分享图片
总结:
AddTransient:每次请求都会从new一个新对象;
Singleton:程序启动后对象就一直存在了,所以需要考虑线程安全问题
Scoped:在同一次请求内共用同一个对象,不同的请求不共用,也应该根据实际考虑线程安全问题

个人网站:http://www.ttblog.site/

简单理解.net 依赖注入的三种方式

原文:https://www.cnblogs.com/MrHanBlog/p/14836603.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!