Выставить карту в личном модуле Guice - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть PrivateModule, и я хочу выставить карту этого провайдера

public class TestInjectionModule extends PrivateModule {
expose(Map.class).annoatedWith(Names.named("map"));
}

для карты

@Named("map")
@Provides
@Singleton
Map<String, String> providesMap(@Named("name1") String v1, @Named("name2") String v2){
 return ImmutableMap.of("key1", v1, "key2", v2);
}

Я получаю следующую ошибку.

Could not expose() java.util.Map annotated with @com.google.inject.name.Named(value=map), it must be explicitly bound.

Как правильно выставить эту карту?

1 Ответ

0 голосов
/ 26 сентября 2019

Это даже компилируется?

expose(Map.class).annotatedWith("map");

Согласно Javadoc, annotatedWith принимает аннотацию, а не строку.

Попробуйте это:

expose(Map.class).annotatedWith(Names.named("map"));

Names.named() javadoc

Кроме того, обязательно добавьте аннотацию @Provides в метод вашего провайдера

...