Guice - 没有绑定任何实现(对于List <string>)

时间:2017-03-06 06:16:24

标签: java guice

当我使用特定注释注释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)

1 个答案:

答案 0 :(得分:6)

To Guice,ListList<String>不同,@Named("Regions") List@Named("Regions") List<String>不同。

new TypeLiteral<List<String>>() {}中使用Key.get(NB一般类型的匿名内部类,因为这是运行时获取非擦除泛型所必需的)来从Guice请求泛型类型。

另外,您的bind声明对任何内容都没有帮助,可以删除。您需要在@Provides方法中手动将Vector转换为List,但bind不会帮助您这样做。