Как использовать привязки Guice в модуле Gin для PlayN?

Представьте, что у вас есть игра 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 в основных классах.


person levivanzele    schedule 01.04.2012    source источник


Ответы (1)


Вы должны попытаться сделать это в обратном порядке. Например. привязки будут определены в проекте GWT и использоваться в Guice через GinModuleAdapter (это позволит вам создать модуль Guice из модуля Gin)

person jusio    schedule 05.04.2012