私はguice MapBinderは注入のためのバインディングキーを公開していますか?
class Fruit extends FruitBase {
@Inject Fruit(Type type) {...}
}
クラスフルーツがあるとフルーツもGuiceのを通して注入されなければならないのでFruitBaseは、方法の注射を介していくつかのものを注入します。
今私は別のクラスにMap<Type, Fruit>
を注入する必要があります。そこで私はMapBinder
を作成します。一番簡単な方法は、各タイプの果実のいくつかのサブクラスを作成することです:
class Orange extends Fruit {
@Inject Orange() {
super(Type.ORANGE);
}
}
// and later
mapBinder.addBinding(Type.ORANGE).to(Orange.class);
しかし、私は、単純なサブクラスの束を作成して、代わりにMapBinderは、私が(に結合していたラベルを注入したくない場合はType.ORANGE
,Type.APPLE
)を果物そのものに入れますか?
mapBinder.addBinding(Type.ORANGE).to(Fruit.class);
mapBinder.addBinding(Type.APPLE).to(Fruit.class);
をして、私の注入された地図は、フルーツの2件のインスタンスがあります:だから私は持っているでしょうタイプORANGEと1、およびAPPLEのものを。
これは可能ですか?
私はここ1つの回避策が見つかりました:https://groups.google.com/d/msg/google-guice/m-m9LiVsgSM/pKVi2EIILCsJ
しかしfactories.get(type).create(type);
はただちょっとにおいがします。
興味深いことに、私はそれを確認する必要があります! –
ドキュメントには、多かれ少なかれすべてを説明する包括的な例があります。http://google.github.io/guice/api-docs/latest/javadoc/com/google/inject/multibindings/MapBinder.html –