Как использовать модуль Guice для использования другого модуля Guice?

Скажем, у меня есть модуль Guice ProdModule, который я хотел бы зависеть от других GuiceModules, ProdDbModule и ProdPubSubModule. Как я могу реализовать ProdModule configure()?

Ответы

Ответ 1

Вы бы install ваши другие модули

protected void configure(){
    install(new ProdDbModule());
    install(new ProdPubSubModule());
    // etc.
}

Ответ 2

В то время как удобно использовать install, вам даже не нужно install других модулей, если вы создадите все необходимые модули при создании Injector:

Injector injector = Guice.createInjector(new ProdDbModule(),
    new ProdPubSubModule(), new ProdModule());

Это может дать вам большую гибкость, чтобы изменить только один из этих модулей в классе точки входа, не требуя изменения ProdModule. Вы также можете указать в модуле, какие привязки ему нужны, чтобы другие модули предоставляли с помощью методов requireBinding.

Ответ 3

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

Различия:

  • для этого не требуются плотные соединительные модули, например install()
  • это создает Module, а не инжектор, что означает, что вы можете легко добавить к инжектору разные модули.

код

import com.google.inject.util.Modules;
Module module = Modules.combine(new ProdDbModule(),
  new ProdPubSubModule(), new ProdModule());
Injector injector = Guice.createInjector(module);