在 Google guice 中绑定通用 class 对象
Binding Generic class object in Google 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);
当我使用 JUnit 测试我的代码时,我无法绑定
Map< String,String> class
以下代码
Injector injector = Guice.CreateInjector((AbstractModule) -> {
bind(Map.class)
.annotatedWith(Names.named("HM.Evaluation.Types")).toInstance(DUMMP_MAP);
});
给我以下 google guice 错误
no implementation for java.lang.map< string , string> is found for the value Named(value = "HM.Evaluation.Types")
有解决办法吗?
您可以绑定泛型
使用provider方法(个人喜欢)
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);
我有以下配置文件..
*.*.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);
当我使用 JUnit 测试我的代码时,我无法绑定
Map< String,String> class
以下代码
Injector injector = Guice.CreateInjector((AbstractModule) -> {
bind(Map.class)
.annotatedWith(Names.named("HM.Evaluation.Types")).toInstance(DUMMP_MAP);
});
给我以下 google guice 错误
no implementation for java.lang.map< string , string> is found for the value Named(value = "HM.Evaluation.Types")
有解决办法吗?
您可以绑定泛型
使用provider方法(个人喜欢)
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);