簡單理解.net 依賴注入的三種方式


前言 :.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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM