コアプロジェクトで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バインディングも削除できます。