Создание встроенного инжектора другого модуля, установленного внутри текущего модуля - PullRequest
1 голос
/ 20 февраля 2020

Иметь интерфейс, которому нужно много реализаций, чтобы быть связанным с ним. Переход к следующему дизайну из-за многих ограничений (может показаться плохим, пожалуйста, проигнорируйте этот проект).

Возможно ли создать инжектор для другого модуля, установленного в текущем модуле, при этом пока выполняется метод configure () для текущий модуль .?

public class CurrentModule extends AbstractModule{


         @Override
         protected void configure() {
                install(new OtherModule());
                final someInterface getInstance = methodToGetInstance();
                bind(SomeInterface.class).to(getInstance);

         }


         public SomeInterface methodToGetInstance() {
          Injector injector = Guice.createInjector(new OtherModule());
          return new ClassImplementingSomeInterface(injector.getInstance(dependency)); 
       }
}

1 Ответ

1 голос
/ 20 февраля 2020

Да, то, что вы спрашиваете, возможно с помощью методов провайдера. Вот как вы должны это сделать:

class CurrentModule extends AbstractModule {

  @Override protected void configure() {
    install(new OtherModule());

    // Optional, but it's good to write it if the dependency becomes missing from OtherModule.
    requireBinding(DependencyFromOtherModule.class);
  }

  @Singleton
  @Provides SomeInterface createSomeInterface(DependencyFromOtherModule dependency) {
    return new ClassImplementingSomeInterface(dependency);
  }

}
...