依賴注入

依賴注入(DI)的重點是減少程式碼耦合。想象一下任何型別的互動都涉及到新的東西,如硬編碼依賴示例

編寫程式碼的很大一部分是測試它的能力。每次我們新建一個新的依賴項時,我們都會使程式碼難以測試,因為我們無法控制該依賴項。

你將如何測試依賴於 DataTime.Now 的程式碼?它總是會改變,所以你沒有參考。這是當你注入穩定引數作為起點時。你可以控制它,你可以根據各種值編寫測試,並確保始終獲得正確的結果。

因此,一個好的選擇是將介面或抽象類作為引數傳遞給建構函式 DI。

介面表示定義良好的合同,你始終可以依賴方法,並且始終可以依賴方法簽名。

一旦開始使用 DI,其他方面將會開啟。例如,即使你在某個時刻傳遞了一個介面,你也需要一個真正的實現才能真正完成任何工作。這是其他概念出現的地方。我們可以使用 IOC(控制反轉)來解決我們的依賴關係。這意味著我們指示我們的程式碼始終使用任何合同的特定實現。當然還有其他方法可以做到這一點。我們總是可以使用特定的實現來例項化每個合同,從那時起我們的程式碼就可以使用該部分:

public ILogging Logging { get; set }

在某些時候我們初始化它。

Logging = new FileLogging();

只要我們的類達到預期的合同,這將始終有效:

public class FileLogging : ILogging

從初始階段開始,我們總是使用 Logging 物件。這使生命更容易,因為如果我們決定更改和使用 DatabaseLogging,我們只需要在一個地方更改程式碼,這正是我們初始化 Logging 類的地方。

DI 只適合測試嗎?不,在編寫可維護程式碼時,DI 也很重要。它可以清楚地分離關注點。

當你編寫任何程式碼時,請認為……是可測試的,我可以編寫測試,這是在注入 DateTime 值而不是使用 DateTime 時。這是有道理的。