2016-11-28 2 views
3

私のナノプロジェクトでは、大きな不快なswitch文をコマンドのマップに置き換えることに決めました。今私は自分のコードを整理する過程にあり、私は人口マップを提供するプロバイダを作成したい。ダガーでマップの値を作成する方法

私はそのためのベストプラクティスになるのだろうかと思います。当初、私はこのような何かを考えていた:私は疑問に思う

@Provides 
ActionResolver provideActionResolver(Dependency dep1,Dependency dep2) { 
    Map<SomeEnum,Action> map = new HashMap<>(); 
    map.put(SomeEnum.A1,new Action1(dep1); 
    map.put(SomeEnum.A2,new Action2(dep2); 
    return new ActionResolver(map); 
} 

それは行くための正しい方法であり、このためのベストプラクティスは何ですか。私は正しいんだ場合、あなたは次のことを行うことができMap Multibindings

+2

あなたはおそらく(http://google.github.io/ [** **地図Multibindings]を探していますdagger/multibindings.html) – EpicPandaForce

答えて

4

、:

@MapKey 
@interface SomeEnumKey { 
    SomeEnum value(); 
} 

@Provides 
@IntoMap 
@SomeEnumKey(SomeEnum.A1) 
Action action1(@Named("dep1") Dependency dep1) { 
    return new Action1(dep1); 
} 

@Provides 
@IntoMap 
@SomeEnumKey(SomeEnum.A2) 
Action action2(@Named("dep2") Dependency dep2) { 
    return new Action2(dep2); 
} 

@Provides 
ActionResolver provideActionResolver(Map<SomeEnum, Action> actions) { 
    return new ActionResolver(actions); 
} 
+2

+1ですが、マップ内のすべての 'Action'インスタンスが必要であるかどうかわからない場合は、' Map > 'をいくつかの作成時に保存することをお勧めします/回収コスト。 –

+0

これはまさに私が必要なものです – user902383

関連する問題