2017-05-18 8 views
0

GuiceとDropwizardを使って開発したアプリケーションで、guiceバンドル、移行バンドルなどの異なるバンドルを作成し、initialize()メソッドでそれらをブートストラップに追加するアプリケーションに取り組んでいます。Guiceの構成をDropwizardアプリケーションのAbstractModule

MyModuleクラスにConfigurationオブジェクトを注入しようとしていますが、実行できません。以下は

public class MyApplication extends Application<MyConfiguration> { 

    public static void main(String args[]) throws Exception { 
     new MyApplication().run(args); 
    } 

    private GuiceBundle<MyConfiguration> guiceBundle = GuiceBundle.<MyConfiguration> newBuilder() 
     .addModule(new MyModule()).enableAutoConfig(getClass().getPackage().getName()) 
     .setConfigClass(MyConfiguration.class).build(Stage.DEVELOPMENT); 

    @Override 
    public void initialize(Bootstrap<MyConfiguration> bootstrap) { 
     bootstrap.addBundle(guiceBundle); 
    } 

    @Override 
    public void run(MyConfiguration configuration, Environment environment) throws Exception { 
     ... 
    } 
} 

がAbstractModule拡張モジュールのクラスです:

は、次のアプリケーションクラスのコードである。このアプローチでは

public class MyModule extends AbstractModule { 

    @Override 
    protected void configure() { 

    } 
} 

を、私はそれは難しいModuleクラスで構成オブジェクトを注入する見つけています()メソッドでは使用できませんが、run()メソッドでは使用できます。

これを行う別の方法はありますか?

注:インジェクタを作成するrun()メソッドのModuleクラスのオブジェクト(MyModuleクラスのコンストラクタでパラメータとして渡されるコンフィグレーションおよび環境オブジェクトを使用して)を作成できる別の方法についてはわかっています。しかし、これは、すべてのManagedオブジェクトとすべてのリソースをrun()メソッドに登録する必要があります。私はそれを避けたい。

+0

https://github.com/HubSpot/dropwizard-guice#environment-and-configurationに従って、これを回避するプロバイダを使用できますか? –

答えて

0

Guiceモジュールは、設定を保存するクラスであり、注入器の作成時に解決されます。モジュールにオブジェクトを明示的に挿入することはできません。

私はGuiceBundleの内部を調べることなく、さらに多くのことを話すことができるとは思いません。