4

コアプロジェクトでGuiceバインディングを使用するPlayNゲームがあるとします。

/* PlayN core Guice module */
public class MyGameModule extends AbstractModule {

    @Override
    protected void configure() {
        bindConstant().annotatedWith(Title.class).to("My game title");
        // Other bindings...
    }

}

同じバインディングを使用したいが、ゲームのGWTプロジェクト(Ginを使用)で使用したい場合はどうなりますか?

Javaプロジェクトでは、次のように簡単に実行できます。

/* PlayN Java Guice module */
public class MyGameModuleJava extends MyGameModule {

    // **OK**: no manual intervention required.

}

これは、GuiceモジュールのconfigureメソッドをGinモジュールに手動でコピーアンドペーストすることなく実現できますか?たとえば、これは回避策として機能しますが、私がやりたいことではありません。

/* PlayN GWT Gin module */
public class MyGameModuleHtml extends AbstractGinModule {

    @Override
    protected void configure() {
        // **NOK**: copy-paste the Guice module, as shown below.
        bindConstant().annotatedWith(Title.class).to("My game title");
        // Other bindings...
    }

}

それは機能しますが、控えめに言ってもきれいではありません。

結論:すべてのPlayNプロジェクトで同じバインディングを使用したいと思います。

解決

だから私がしたことはGinModuleAdapter、答えに基づいて、私のJavaメインでを使用することです:

Injector injector = Guice.createInjector(new GinModuleAdapter(new MyGameModuleHtml()));

このようにして、コアクラスのGuiceバインディングも削除できます。

4

1 に答える 1

2

あなたはそれを逆にしようとするべきです。たとえば、バインディングはGWTプロジェクトで定義され、Guiceで使用されGinModuleAdapterます(GinモジュールからGuiceモジュールを作成できるようになります)

于 2012-04-05T12:41:36.437 に答える