以前的程式會在 Controller 裡面 new ,即便使用了 interface ,仍無法完全不相依
依賴注入就是把他外移,由使用者決定傳入的實體 :
但這樣傳入實體就變成一件瑣碎的事。所以 MVC 5 時已經有許多工具可以協助處理 DI,如 Unity、autofac 等等,你可以只要設定傳入的實體,然後由程式自動幫你傳入。
HelloWorld
在專案建立一個 Services 資料夾,然後建立 HelloService 與 IHelloService
在 Core 裡面,可以直接在 Startup 裡面的 ConfigureServices 裡面進行註冊
在 HomeController 的建構子設定傳入 IHelloWorldService
建立 Hello Action ,裡面直接使用 IHelloWorldService
執行結果 :
優點 :
Controller 裡面都使用 interface ,降低耦合,所以可以更容易測試
Service 的生命週期
Transient : 每次注入都 new 一個新的
Scoped : 每次請求都 new 一個新的,同一個 Request 都是同一個實例
Singleton : 程式運行期間只會有一個實例