Guice, ищет способы внедрения ключевых экземпляров Map - PullRequest
0 голосов
/ 10 января 2020

Я новичок ie в рамках Guice, необходимо ввести разные экземпляры одного и того же класса, скажем, "TestAB c" на основе некоторого ключа. Я могу добиться этого, используя аннотацию @NAmed @Named("A", new TestAbc), @Named("B",new TestAbc), но это требует жесткого кодирования всех значений. Однако я хотел бы использовать enum в качестве ключа, чтобы любой класс, которому требуется объект класса 'TestAb c', мог запросить конкретный c one.

class TestAbc{
   String name;
   public TestAbc(String name){
     this.name=name;
  }
}

class testModule extends extends AbstractModule {
    @Override
    protected void configure() {
        Provider<Injector> injectorProvider = binder().getProvider(Injector.class);
        MapBinder<String, TestAbC> mapbinder
                = MapBinder.newMapBinder(binder(), String.class, TestAbc.class);
        Arrays.stream(TestEnum.values()).forEach(x->{
            mapbinder.addBinding(x.name()).toProvider(new TestAbc(x.name));
        });


 }

В другом классе возможно ли это сделать что-то вроде этого:

class Test2{
@Inject
Test2(@Named('A') TestAbc abc){} // here 'A' refers to enum key.
}

Я иду в правильном направлении? Если да, то как этого добиться, используя хитрость. Если нет, пожалуйста, дайте мне знать правильный подход для достижения того же.

...