我不知道這實際上是否符合DI,因爲我不是在談論注入抽象依賴的具體實現。我只是在談論注入需要時間的東西。在我的遊戲引擎中,我想清理處理遊戲狀態(菜單,舞臺選擇,遊戲中,過場動畫等)的部分。所有這些都實現了一個通用接口。但其中的一個在遊戲中也被特別引用爲當前正在玩的等級。多級DI重構
現在有43個參考資料在我的項目中達到當前級別,通過遊戲訪問一個單身人士。例如,Game.CurrentGame.CurrentMap.Something
。引用在屏幕,實體,行爲組件中,甚至在主窗體中(用於調試工具)。
我想通過注入所需的所有東西來擺脫此引用。但是CurrentMap本身並不是所需的依賴關係 - 其他的東西在它下面被訪問。所以我最初的計劃是進入每個地方,找到實際使用的東西,並通過向該類構造函數添加一個參數來注入它。這引入了另一個層次的依賴關係,所以我重複這個過程,直到一切都完成。但是問題在於它會引入更多的構造函數參數,包括不直接使用依賴項的地方。很多類會結束接受依賴關係,以便它們可以將它傳遞給它們下面的另一個對象。
什麼將是一個更清潔的替代呢?
+1我想,如果你發現自己注射的東西,所以您可以將它傳遞給別的東西構造函數,而不是使用直接的東西,那麼你應該考慮經過別的東西代替中。 –
你能否澄清一下「在b'的構造函數中請求它」?這聽起來像'b'仍然知道'c',因爲它是在問它。你能給一個代碼示例嗎? – Tesserex