在Guice中注入自定义对象的Map

问题描述 投票:0回答:1

我是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.

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

java guice
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.