Guice:所有者の注入方法に応じて、注入されるタイプを変更します

StackOverflow https://stackoverflow.com/questions/1219524

  •  10-07-2019
  •  | 
  •  

質問

特定のタイプの複数のインスタンスを必要とするguiceベースのアプリがあるため、依存関係を明確にするために名前付きアノテーションを使用する予定です。ただし、このタイプの依存関係は、どちらを取得するかによっても異なります。

説明のために、私が持っていると言ってみましょう

@Singleton
public class FooCache {
    private final FooCacheListener listener;
    @Inject 
    public FooCache(FooCacheListener listener) {
        this.listener = listener;
    }
    // do stuff
}

そして2つの別々のインスタンスが必要だと言ってみましょう

@ThatOne FooCache

1つのクラスで

@ThisOne FooCache
別の

ここで、それぞれの場合に異なるリスナーが必要だとしましょう(1つはデータベースに何かを書き込み、もう1つはJMSまたは分散キャッシュに通知を送信する場合があります)。どうすればいいですか? FooCacheListenerに名前を付けることはできません。ある状況では別の名前が必要になりますが、ここには1つの場所しかありません。これを行うことを考えることができる唯一の方法はFooCacheをサブクラス化することですが、それは私にとって本当に不器用なアプローチのようです。

乾杯 マット

役に立ちましたか?

解決

PrivateModulesを使用できる場合があります。 ここに移動して、方法を教えてください似ているがわずかに異なるオブジェクトのツリーを2つ構築しますか?これは、同じクラスの2つの異なるインスタンスを作成する方法です。 「左」の代わりにcachelistenersを渡すことができます。および「正しい」例で渡されます。 それがあなたが望むもののように見える場合、そこから詳細を含むリンクがさらにあります。

別のオプションとして、上記のリンクでも説明されている Guiceを介してオブジェクトを作成するときにパラメーターを渡す方法

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top