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