我是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.
我对如何解决这个问题一无所知。
从上面的例子中不清楚你在哪里安装RBSAVSTechServiceModule
。我认为它是在PaymentModule
内完成的。我还注意到您使用绑定注释创建了地图绑定器。你确定你的注射点使用相应的@Named("TransactionManagerMap")
吗?错误消息似乎表明它不是。