3 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
這要看情況 :-)。
如果沒(méi)有依賴項(xiàng),類(lèi)無(wú)法完成其工作,則將其添加到構(gòu)造函數(shù)中。該類(lèi)需要新的依賴項(xiàng),因此您希望您的更改能夠破壞事物。此外,創(chuàng)建一個(gè)未完全初始化的類(lèi)(“兩步構(gòu)造”)是反模式(IMHO)。
如果類(lèi)可以在沒(méi)有依賴項(xiàng)的情況下工作,那么setter就可以了。

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
一般優(yōu)選的方法是盡可能多地使用構(gòu)造器注入。
構(gòu)造函數(shù)注入準(zhǔn)確地說(shuō)明了對(duì)象正常運(yùn)行所需的依賴項(xiàng) - 沒(méi)有什么比新建一個(gè)對(duì)象更令人討厭,并且在調(diào)用一個(gè)方法時(shí)因?yàn)闆](méi)有設(shè)置某個(gè)依賴項(xiàng)而使它崩潰。構(gòu)造函數(shù)返回的對(duì)象應(yīng)處于工作狀態(tài)。
嘗試只有一個(gè)構(gòu)造函數(shù),它保持設(shè)計(jì)簡(jiǎn)單并避免歧義(如果不是人類(lèi),DI容器)。
當(dāng)你在他的書(shū)“.NET中的依賴注入”中使用Mark Seemann所稱(chēng)的本地默認(rèn)值時(shí),你可以使用屬性注入:依賴是可選的,因?yàn)槟憧梢蕴峁┮粋€(gè)很好的工作實(shí)現(xiàn)但是想讓調(diào)用者指定一個(gè)不同的實(shí)現(xiàn)需要。
(以下的答案)
我認(rèn)為如果注入是強(qiáng)制性的,構(gòu)造函數(shù)注入會(huì)更好。如果這會(huì)添加太多構(gòu)造函數(shù),請(qǐng)考慮使用工廠而不是構(gòu)造函數(shù)。
如果注射是可選的,或者如果你想在中途改變它,那么setter注射是很好的。我一般不喜歡制定者,但這是一個(gè)品味問(wèn)題。
添加回答
舉報(bào)