我想就如何爲具有下述結構的系統構造依賴注入的最佳方法提出一些建議和反饋。我使用的是Guice,因此寧願以基於註解的聲明爲中心的解決方案,而不是XML重型的Spring風格的配置。依賴注入的正確結構(使用Guice)
考慮一組類似的對象Ball, Box, and Tube
,每個對象都依賴於Logger
,通過構造函數提供。 (這可能並不重要,但所有四個類別碰巧都是單例 - 應用程序,而不是四人幫,多種。)
A ToyChest
類負責創建和管理三個形狀對象。 ToyChest
本身不依賴於Logger
,除了創建形狀對象。
ToyChest
類被實例化爲Main
類中的應用程序單例。
我對構建ToyChest
中形狀的最佳方法感到困惑。我要麼(1)需要訪問Guice Injector
實例已附加到Module
綁定Logger
實施或(2)需要創建一個新的Injector
附加到正確的Module
。
(1)通過添加@Inject Injector injector
場ToyChest
完成,但這種感覺怪怪的,因爲ToyChest
實際上並沒有任何直接的依賴---只有那些它實例的孩子。 (2),我不知道如何通過適當的Module
。
我在正確的軌道上嗎?有沒有更好的方法來構造這個?
對此question的回答提到通過Provider
而不是直接使用噴射器,但我不確定應該如何工作。
編輯:
也許更簡單的問題是:使用吉斯時,這裏是構建形狀的物體的適當位置? ToyChest
會與他們做一些配置,但我想他們可以在別處構建。 ToyChest
(作爲管理它們的容器),而不是Main
,在我看來,就像構建它們的適當位置。
Ball,Box和Tube都是應用程序單例,但它們是由ToyChest創建的?你能澄清爲什麼需要這樣嗎? ToyChest可以在建造時分配給他們嗎? –
1)ToyChest決定創建哪個。 2)他們可以通過構造函數傳遞給ToyChest,但在其他地方不需要它們。這樣(在我看來)會不必要地使構造者複雜化。還有一個全烏龜的問題。是什麼使他們傳遞給ToyChest?也許通過構造函數傳遞它們是正確的,我只是沒有看到更大的結構。 –