依賴注入

依賴注入背後的基本思想是建立更鬆散耦合的程式碼。當一個類而不是新建它自己的依賴項而不是接受它的依賴項時,該類變得更加簡單,可以作為一個單元進行測試( 單元測試 )。

為了進一步闡述鬆散耦合 - 這個想法是類依賴於抽象,而不是結構。如果類 A 依賴於另一個具體類 B,那麼沒有 B 就沒有真正的 A 測試。雖然這種測試可以正常,但它不適合單元可測試的程式碼。鬆散耦合的設計將定義 A 所依賴的抽象 IB(作為示例)。然後可以模擬 IB 來提供可測試的行為,而不是依靠 B 的真實實現來為 A 提供可測試的場景。

緊耦合的例子(C#):

public class A
{
    public void DoStuff()
    {
        B b = new B();
        b.Foo();
    }
}

在上面,類 A 取決於 B。沒有混凝土 B 沒有測試 A。雖然這在整合測試場景中很好,但很難對單元進行單元測試 15。

上面的鬆散耦合實現可能看起來像:

public interface IB
{
    void Foo();
}

public class A
{
    private readonly IB _iB;

    public A(IB iB)
    {
        _iB = iB;
    }

    public void DoStuff()
    {
        _b.Foo();
    }
}

這兩個實現看起來非常相似,但是有一個重要的區別。A 類不再直接依賴於 B 類,它現在依賴於 IBA 類不再有責任新建自己的依賴 - 現在必須提供 A