绑定Google guice中的泛型类对象

时间:2018-04-04 05:40:07

标签: dependency-injection guice

我有以下配置文件..

*.*.HM.Evaluation.Types = {
   "key1" = "value1";
   "key2" = "value2";
   "key3" = "value3";
};

我有以下构造函数注入...

@Inject
public myConstuctor(@NonNull @Named("HM.Evaluation.Types") final Map<String , String> myMap) { ... }

当我使用

运行代码时,这可以正常工作
Properties myProperties = new Properties().load(new FileReader("myConfig.properties"));
Names.BindProperties(Binder() , myProperties);

当我使用JUnits测试我的代码时,我无法绑定

Map< String,String> class

以下代码

Injector injector = Guice.CreateInjector((AbstractModule) -> {
bind(Map.class)
    .annotatedWith(Names.named("HM.Evaluation.Types")).toInstance(DUMMP_MAP);
});

给了我以下谷歌guice错误

  

没有java.lang.map的实现&lt; string,string&gt;找到值Named(value =“HM.Evaluation.Types”)

有解决方法吗?

1 个答案:

答案 0 :(得分:1)

您可以绑定泛型

使用提供者方法(个人喜欢的)

class MyModule extends AbstractModule {
  ...
  @Provides
  @Singleton
  @Named("HM.Evaluation.Types")
  Map<String,String> provideDummpMap() {
    return DUMMP_MAP;
  }
}

或者,您可以使用TypeLiteral

bind(new TypeLiteral<Map<String,String>>(){})
  .annotatedWith(Names.named("HM.Evaluation.Types"))
  .toInstance(DUMMP_MAP);