2 回答

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊
DI 可以只用類而不用接口來(lái)制作。您注冊(cè)類型,然后注入類型。就這樣。在談?wù)搯卧獪y(cè)試中的模擬時(shí)會(huì)出現(xiàn)差異。在 c# 中,您只能模擬虛擬或抽象(也是虛擬)成員。因此,如果你希望你的代碼是可測(cè)試的,你需要用virtual
關(guān)鍵字標(biāo)記所有公共成員,或者在你的實(shí)現(xiàn)中使用接口而不是真正的類。在 Java 中,默認(rèn)情況下所有方法都是虛擬的,因此它們不會(huì)與一對(duì)一接口混淆,因?yàn)樗鼈兛梢阅M所有內(nèi)容。

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊
依賴注入用于包含和分離關(guān)注點(diǎn)。你想在你的代碼中做一些新的事情,你添加一個(gè)依賴接口來(lái)實(shí)現(xiàn)。然后您可以測(cè)試您的代碼,甚至不必為該接口的實(shí)現(xiàn)操心,直到稍后。
不過(guò),您的問(wèn)題是關(guān)于接口和實(shí)現(xiàn)之間的一對(duì)一關(guān)系。從我的角度來(lái)看,這無(wú)關(guān)緊要,因?yàn)槟魂P(guān)心已經(jīng)聲明的接口上下文中的實(shí)現(xiàn),而不是使用它的地方。例如,你可以讓一個(gè)類繼承多個(gè)可注入接口,這通常表明它有太多的責(zé)任,但這是可以做到的。您可以有多個(gè)繼承相同接口的類,然后根據(jù) DI 配置使用。甚至在某些情況下,DI 容器會(huì)處理我通常委托給工廠的東西,主要是為您提供基于某些參數(shù)的接口的實(shí)現(xiàn)。
無(wú)論哪種方式,這有什么關(guān)系?如果(減少到荒謬)每個(gè)類有一個(gè)開發(fā)人員,那么他們將只編寫代碼和測(cè)試并定義所需依賴項(xiàng)的接口,讓其他人實(shí)現(xiàn)它們。
添加回答
舉報(bào)