詳解.NET Core 依賴注入生命週期

前言

.NET Core 自帶依賴注入框架,支持三種不同生命週期的注入模式:

  • Singleton 單例模式
  • Scoped 區域模式
  • Transient 瞬時模式

但是常常不知道什麼時候使用哪種模式才最合適,接下來我就用代碼詳細解讀一下三種模式

代碼示例

首先新建.NET Core API項目來進行代碼測試
在這裏插入圖片描述

分別新建 Scoped、Singleton、Transient 三種模式的服務與接口,裏面寫一個GetIndex() 方法獲取index ,用來區別服務的生命週期。
在這裏插入圖片描述
三個服務代碼都是如此,然後添加依賴注入
在這裏插入圖片描述
最後在控制器中天加測試方法
在這裏插入圖片描述

使用 [FromService] 特性注入服務,每次服務注入兩次,用來區別服務的變化,輸出服務的index,啓動項目查看結果
在這裏插入圖片描述

上圖可以看到單例和區域模式下,兩次注入的服務index是疊加的,可以說明兩次服務注入的都是同一個。而瞬時模式兩次注入的服務index都是初始值,也就說明兩次服務都是新的。然後我們不停止項目在執行一次方法
在這裏插入圖片描述
可以看到單列模式和區域模式有了不同,單例模式注入的服務,index值一直在疊加,而區域模式有重新從0開始疊加。

總結

結合以上示例可以清楚的分別三種模式的差別

  • Singleton
    單例模式,服務在第一次請求時被創建,其後的每次請求都沿用這個已創建的服務。

  • Scoped
    作用域模式,服務在每次請求時被創建,整個請求過程中都貫穿使用這個創建的服務。

  • Transient    
    瞬態模式,服務在每次請求時被創建

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章