2020年4月2日 星期四

Asp.Net Core DI Container(一):注入自訂服務

在 asp.net core 使用IoC/DI 已是內建基因,無法逃避,且有內建 DI 容器,開出對應不同生命週期的注入方法,方便使用。




先認識一下注入方法有三種選項:

  1. Transient:注入後再middlewave 中,任何地方取得的 instance 都是新的。
  2. Scoped:在同一次Request 注入中,取得的 instance 是同一個。
  3. Singleton:整個 Process 只建立一個 instance,任何時候都共用它。

各個使用時機,覺得若需要長連線的應用適合 singleton,例如 cache ;CRUD 應該適用 scoped,其他不常使用的或不想共用的則適合 transient。


接著來看一下測試,我們會在 StartUp.cs 的 ConfigureServices 方法,註冊並且注入物件,如下圖,其中SettingService 其實沒有提供介面,還是可以有作用,但實作時還是建議墊一下interface









其他的類別如下,介面都是空的沒有任何方法,其中 SettingService 比較複雜,在建構式需傳入了3個介面實作類別













































接著下來,我們設計 client 端取得被注入的物件,這邊設計在 HomeCotroller 的建構式調用























並且在預設 Index action 呼叫hashcode方法,並且印出結果



















以上,其中可以觀察到 transient是不同物件,而 scoped 與 singleton 兩次都是同一個物件。

若目標很明確只有某個 action 會使用相關物件,其實也可以使用 FromService 宣告,如下圖









沒有留言:

張貼留言