web-dev-qa-db-ja.com

Guiceモジュールに別のGuiceモジュールを使用させるにはどうすればよいですか?

他のGuiceModules、ProdDbModuleおよびProdPubSubModuleに依存したいGuiceモジュールProdModuleがあるとしましょう。 ProdModuleのconfigure()をどのように実装しますか?

28
Noel Yap

インストール 他のモジュール

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

installを使用すると便利ですが、installを作成するときに必要なすべてのモジュールを提供する限り、他のモジュールをInjectorする必要はありません。

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

これにより、ProdModule自体を変更することなく、エントリポイントクラスのこれらのモジュールの1つだけを変更する柔軟性が高まります。 requireBindingメソッドを使用して、他のモジュールが提供する必要のあるバインディングをモジュールで示すこともできます。

22
ColinD

_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);
_
7
Alex