先認識一下注入方法有三種選項:
- Transient:注入後再middlewave 中,任何地方取得的 instance 都是新的。
- Scoped:在同一次Request 注入中,取得的 instance 是同一個。
- 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 宣告,如下圖
沒有留言:
張貼留言