当我使用特定注释注释List时,我正在尝试绑定List的实例。
我尝试使用Instance Binding和Provider方法,但我一直收到错误。
这是我的@Provides方法和configure()
@Provides @Named("Regions")
public List<String> getRegions() {
return AppConfig.findVector("Regions"); //this would return a Vector<String>
}
@Override
protected void configure() {
bind(List.class).annotatedWith(Names.named("Regions")).to(Vector.class);
}
以下是我尝试获取实例的方法 -
List<String> regions = injector.getInstance(Key.get(List.class, Names.named("Regions")));
这是我得到的错误
com.google.inject.ConfigurationException: Guice configuration errors:
1) No implementation for java.util.List annotated with @com.google.inject.name.Named(value=Regions) was bound.
while locating java.util.List annotated with @com.google.inject.name.Named(value=Regions)
答案 0 :(得分:6)
To Guice,List
与List<String>
不同,@Named("Regions") List
与@Named("Regions") List<String>
不同。
在new TypeLiteral<List<String>>() {}
中使用Key.get
(NB一般类型的匿名内部类,因为这是运行时获取非擦除泛型所必需的)来从Guice请求泛型类型。
另外,您的bind
声明对任何内容都没有帮助,可以删除。您需要在@Provides方法中手动将Vector转换为List,但bind不会帮助您这样做。