依賴注入
依賴注入背後的基本思想是建立更鬆散耦合的程式碼。當一個類而不是新建它自己的依賴項而不是接受它的依賴項時,該類變得更加簡單,可以作為一個單元進行測試( 單元測試 )。
為了進一步闡述鬆散耦合 - 這個想法是類依賴於抽象,而不是結構。如果類 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
類,它現在依賴於 IB
。A
類不再有責任新建自己的依賴 - 現在必須提供給 A
。