2017-12-26 4 views
0

Guiceが初めてです。次のようにGuiceのカスタマイズされたオブジェクトのマップを注入する

public class TransactionConfigModule extends AbstractModule { 

@Override 
protected void configure() { 

    MapBinder<String, ITransactionManager> transactionModeMap = MapBinder 
      .newMapBinder(binder(), String.class, ITransactionManager.class 
      , Names.named("TransactionManagerMap")); 

    transactionModeMap.addBinding(TransactionMode.CREDIT.platformName()) 
          .to(CreditCardManager.class) 
          .asEagerSingleton(); 
    transactionModeMap.addBinding(TransactionMode.DEBIT.platformName()) 
          .to(DebitCardManager.class) 
          .asEagerSingleton(); 
} 
} 

そして私は(すでにあった)インジェクターを作成しました::(すでにあった)

Injector injector = createInjector(
      new PaymentModule() 
    ); 

PaymentModuleには、次のようなものです:私は、次のモジュール書かれている

ここで
public class RBSAVSTechServiceModule extends AbstractModule { 
    ... 
    protected void configure(){ 
     install(new TransactionConfigModule()); <--- I just added this line in the existing code 
    } 
    } 

私は取得しています次の例外:

No implementation for java.util.Map<java.lang.String, ITransactionManager> was bound. 

これを修正する方法については何も考えていません。

答えて

0

上記の例から、どこにインストールするのかはわかりませんRBSAVSTechServiceModule。私はそれがPaymentModuleの内部で行われると仮定します。 また、バインディングアノテーションを使用してマップバインダーを作成したことにも注意してください。あなたの注射点が対応する@Named("TransactionManagerMap")を使用していると確信していますか?エラーメッセージはそうではないと思われます。

関連する問題