Представьте, что у вас есть игра PlayN, в основном проекте которой используются привязки Guice:
/* PlayN core Guice module */
public class MyGameModule extends AbstractModule {
@Override
protected void configure() {
bindConstant().annotatedWith(Title.class).to("My game title");
// Other bindings...
}
}
Что, если вы хотите использовать эти те же привязки, но в своем проекте игры GWT (с Джином)?
В проекте Java это так же просто, как и получается:
/* PlayN Java Guice module */
public class MyGameModuleJava extends MyGameModule {
// **OK**: no manual intervention required.
}
Можно ли этого добиться без необходимости вручную копировать и вставлять метод конфигурации модуля Guice в модуль 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 в основных классах.