以下に説明する構造を持つシステムの依存性注入を構築するための最良の方法について、いくつかの提案とフィードバックをお願いします。私は Guice を使用しているため、XML を多用する Spring スタイルの構成ではなく、注釈ベースの宣言を中心としたソリューションを好むでしょう。
コンストラクターを介して提供されるBall, Box, and Tube、それぞれが に依存する一連の同様のオブジェクト を考えてみましょう。Logger(これは重要ではないかもしれませんが、4 つのクラスはすべてたまたま、Gang-of-Four ではなくアプリケーションのシングルトンです。)
クラスは、3 つの形状オブジェクトのToyChest作成と管理を担当します。 である形状オブジェクトを作成することを除けば、ToyChestそれ自体は に依存していません。Logger
クラスは、クラスToyChest内のアプリケーション シングルトンとしてインスタンス化されますMain。
で形状を構築する最良の方法について混乱していToyChestます。(1) 実装へのバインディングに既にアタッチされている GuiceInjectorインスタンスにアクセスする必要があるか、(2) right にアタッチされた新しいインスタンスを作成する必要があります。ModuleLoggerInjectorModule
@Inject Injector injector(1) は にフィールドを追加することによって実現されますが、実際には直接的な依存関係がないToyChestため、これは奇妙に感じます。インスタンス化する子の依存関係のみです。ToyChest
(2) については、適切な を渡す方法がわかりませんModule。
私は正しい軌道に乗っていますか?これを構造化するより良い方法はありますか?
この質問への回答には、インジェクターを直接使用する代わりに a を渡すことが記載されてProviderいますが、それがどのように機能するのかわかりません。
編集:
もっと単純な質問かもしれませんが、Guice を使用する場合、形状オブジェクトを構築する適切な場所はどこでしょうか? ToyChestそれらを使用していくつかの構成を行いますが、他の場所で構築できると思います。 ToyChest(それらを管理するコンテナーとして) ではなくMain、それらを構築するのに適切な場所のように思えます。