DI 依賴注入(Dependency Injection)
DI(Dependency Injection)是一種設計模式,它的主要目的是降低軟體元件之間的耦合度,讓程式更容易測試和維護。DI 透過將類別所需的相依物件,由外部傳入,讓類別不需要知道相依物件的實作細節,只需要知道相依物件所提供的介面(interface),就可以正常運作。
生命週期
在 DI 中,相依物件的生命週期通常由 DI 容器來管理。一般來說,每個類別在 DI 容器中都會有一個對應的生命週期。常見的生命週期有以下幾種:
- Transient:每次注入都會創建一個新的實例。
- Singleton:整個應用程序只會創建一個實例。
- Scoped:在同一個作用域中只會創建一個實例。
使用規則
使用 DI 時,有幾個重要的使用規則:
- 盡量避免在程式碼中直接 new 物件,應該使用 DI 容器來管理物件的生命週期。
- 相依物件的注入應該使用介面(interface)而不是具體類別(concrete class)。
- 相依物件的注入應該在建構子(constructor)中完成,而不是在類別的方法中完成。
- 相依物件的注入應該由 DI 容器負責,而不是由使用者負責。
以下是一個簡單的使用 DI 的範例:
1 | public interface IService |
在上面的範例中,IService 是一個介面,Service 是一個實現該介面的類別。Consumer 類別有一個建構子,該建構子需要一個 IService 的實例。在使用 DI 容器時,我們使用 ServiceCollection 類別來註冊 IService 和 Consumer 類別,然後使用 BuildServiceProvider 方法
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 John Conte!
評論
DisqusGitalk