我有以下配置文件..
*.*.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”)
有解决方法吗?
答案 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);