Как использовать привязки Guice в модуле Gin для PlayN? - PullRequest
4 голосов
/ 01 апреля 2012

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

1 Ответ

2 голосов
/ 05 апреля 2012

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

...