2013-02-28 60 views
1

如果它是由將它注入到使用它的對象的類中創建的,那麼是不是隻是將對象創建移動到堆棧上一步?這是否意味着低級別類所需的所有對象都需要一次一個地傳遞給每個對象,直到它到達需要它的對象?在依賴注入中哪裏是要創建的注入對象?

所有對象及其依賴關係都可以在一開始就設置好,但是不會出現這種凹痕性能,因爲對象會一直懸掛到需要時爲止?

回答

2

是的,它將對象實例化到堆棧上。但它正在將它向上移動到一個可以更好地決定實際使用哪個實現的地方。如果我想用一個stubbed版本替換我的數據訪問層來執行業務邏輯的性能測試,那麼我可以不更改業務邏輯代碼的一行。

有可能注入您的依賴關係的方法。就我而言,我在任何地方都使用構造函數注入。使用這種方法,如果較低級別的類需要依賴關係,它只是將該依賴關係的接口放入其構造函數中。無需從堆疊中的更高級別傳球。如果您需要兩個類中的同一個實例,那麼您應該查看將依賴項註冊到容器時的生活方式/範圍,以便兩個類恰好通過相同的實例。

一些DI實現使用延遲加載來實例化其對象。 (即,直到試圖使用該對象以使其實際被實例化)。有些不這樣做。此外,您需要相當大的依賴關係圖來降低性能。保持你的構造器簡單快捷(無論如何都是一個很好的練習),這不會是一個問題,我向你保證。 DI容器在釋放不再使用的物體時非常聰明(再次,要特別注意生活方式/範圍)。

我希望這會有所幫助。

+0

+10。 。 。 。 。 。 – Steven 2013-02-28 23:00:43

+0

不知道該評論@Steve怎麼看。 (還有很多最後票。)我的答案是否令人困惑?任何特定領域需要澄清? – TylerOhlsen 2013-02-28 23:18:23

+0

+10意味着我完全同意你的觀點,如果可以的話,我會給予10個高分。 – Steven 2013-02-28 23:23:03