Как заставить модуль Guice использовать другой модуль Guice? - PullRequest
24 голосов
/ 20 августа 2011

Допустим, у меня есть модуль Guice ProdModule, от которого я хотел бы зависеть от других модулей GuiceModule, ProdDbModule и ProdPubSubModule. Как мне реализовать функцию configure () ProdModule?

Ответы [ 3 ]

39 голосов
/ 20 августа 2011

Вы бы установили другие ваши модули

protected void configure(){
    install(new ProdDbModule());
    install(new ProdPubSubModule());
    // etc.
}
22 голосов
/ 20 августа 2011

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

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

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

6 голосов
/ 06 декабря 2016

Вы можете использовать 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);
...