2009-08-02 8 views
1

私は指定されたタイプの複数のインスタンスを必要とするguiceベースのアプリケーションを持っていますので、名前付き注釈を使用して依存関係を曖昧さを排除します。しかし、このタイプの依存関係は、どちらが得られるかに基づいて変化する必要があります。説明するためにguice:所有者の注入方法によって注入されるタイプを変更する

は私が

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

を持って言うことができますし、私は

1クラスの
@ThatOne FooCache 

@ThisOne FooCache 
を持っているかもしれないので、私は2つの別々のインスタンスを必要としていると言うことができます

を別にしてください。

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

乾杯 マット

答えて

2

あなたはPrivateModulesを使用することができるかもしれません。 hereに移動し、にスクロールします。類似しているがわずかに異なる2つのオブジェクトツリーを作成するにはどうすればよいですか?これは、同じクラスの2つの異なるインスタンスを持つ方法です。これは、実行しようとしているものとほとんど同じです。この例で渡された "lefty"と "righty"の代わりに、あなたのキャッシュリストを渡すことができます。 あなたが望むように見えれば、そこからの詳細とのリンクが増えています。

もう1つの選択肢は、上のリンクでも説明されているファクトリを質問に入れることです。Guice経由でオブジェクトを作成するときにパラメータを渡すにはどうすればよいですか?

+0

何とか私はドキュメントでそれを逃した、それは私が探しているものです。ありがとう。 – Matt

関連する問題