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