在Guice中

时间:2017-12-26 15:21:59

标签: java 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.

我对如何解决这个问题一无所知。

1 个答案:

答案 0 :(得分:0)

从上面的示例中,您不清楚安装RBSAVSTechServiceModule的位置。我假设它是在PaymentModule内完成的。 我还注意到您使用绑定注释创建了地图绑定器。您确定您的注射点正在使用相应的@Named("TransactionManagerMap")吗?错误消息似乎表明它不是。