抽象的な依存関係の具体的な実装について説明しているわけではないので、これが実際にDIとして認定されるかどうかはわかりません。私はちょうど必要な期間のものを注入することについて話しています。マルチレベルのDIリファクタリング
私のゲームエンジンでは、ゲームの状態(メニュー、ステージ選択、ゲーム内、カットシーンなど)を処理する部分をクリーンアップしたいと考えています。これらのすべてが共通のインターフェースを実装しています。しかし、彼らのうちの1つは、ゲーム内の現在のレベルとして具体的に参照されています。
私のプロジェクトには現在、ゲームを通してアクセスされている現在のレベルの参照が43個あります。たとえば、Game.CurrentGame.CurrentMap.Something
です。リファレンスは、スクリーン、エンティティ、ビヘイビアコンポーネント、メインフォーム(デバッグツール用)であっても参照できます。
私は必要なものすべてを注入することでこのリファレンスを取り除きたいと思っています。しかし、CurrentMap自体は望ましい依存性ではなく、他のものはその下にアクセスされています。私の初期の計画は、それぞれの場所に行き、実際に使用されているものを見つけ出し、そのクラスのコンストラクタにパラメータを追加して注入することです。これは1レベル上の別の依存関係を導入するので、すべてが終了するまでプロセスを繰り返します。しかし、この問題は、依存関係を直接使用していない場所を含め、より多くのコンストラクタパラメータを導入することになります。多くのクラスは依存関係を受け入れるだけで、その下にある別のオブジェクトにそれを渡すことができます。
これに代わるクリーンな方法は何ですか?
+1何かを注入して他の何かのコンストラクタに渡すことができ、それを直接使っていないと思ったら、代わりに何かを渡すことを考えていなければなりません。 –
「単に「b」のコンストラクタでそれを求めてください」ということを明確にすることはできますか?それはそれを求めているので、 'b'はまだ' c'について知っているように聞こえる。コードサンプルを渡すことができますか? – Tesserex