2015-02-05 13 views
1

С GWTP/Gin, возможно ли при необходимости установить модуль во время компиляции? У нас есть случай, когда мы хотели бы, чтобы презентатор и просмотр были доступны только в приложении при работе в режиме «разработки», где этот режим определяется флагом в файле .gwt.xml (устанавливается сборкой).Дополнительная установка модуля

Раньше мы бегали GXT с архитектурой MVC и сделать следующее в нашем модуле:

<replace-with class="com.mypackage.DevEditController" > 
    <all> 
     <when-property-is name="isDevelopment" value="true" /> 
     <when-type-is class="com.mypackage.EditController" /> 
    </all> 
    </replace-with> 
    <replace-with class="com.mypackage.StubEditController" > 
    <all> 
     <when-property-is name="isDevelopment" value="false" /> 
     <when-type-is class="com.mypackage.EditController" /> 
    </all> 
    </replace-with> 

И создадим контроллер со следующим:

(EditController)GWT.create(EditController.class); 

Я хотел бы сделать что-то подобное с GWTP, где компиляция приложения, отличная от разработки, ничего не знает об этом ведущем. По существу, делать что-то вдоль линий этого в нашем файле модуля:

<set-configuration-property name="gin.ginjector.modules" 
           value="com.mypackage.gin.SharedModule"/> 

if this is development mode: 
<set-configuration-property name="gin.ginjector.module.desktop" 
           value="com.mypackage.gin.DevDesktopModule"/> 
else: 
<set-configuration-property name="gin.ginjector.module.desktop" 
           value="com.mypackage.gin.DesktopModule"/> 

Где DesktopModule и DevModule будет делать то же самое, но DevDesktopModule бы загрузить дополнительный модуль (TestModule), содержащий ведущий/вида связывания.

Возможно ли это с точки зрения конфигурации? Я думал, что могу сделать это с двумя файлами .gwt.xml, отключенными процессом сборки, но процесс сборки всегда видит файл TestModule, независимо от того, установлен он или нет (видимо, из-за Inject). Это сообщение об ошибке, мы получаем, когда модуль присутствует в исходном дереве, но никогда не установлено (это от сборки, где мы не хотим установить его)

[ERROR] Error injecting com.blah.test.TestPresenter$MyView: Unable to create or inherit binding: No @Inject or default constructor found for com.blah.test.TestPresenter$MyView 
Path to required node: 

com.google.gwt.inject.client.AsyncProvider<com.blah.test.TestPresenter> [com.gwtplatform.mvp.client.ClientGinjector#getcomblahtestTestPresenter()] 
-> com.blah.test.TestPresenter [Implicit injection of com.google.gwt.inject.client.AsyncProvider<com.blah.test.TestPresenter>] 
-> com.blah.test.TestPresenter$MyView [@Inject constructor of com.blah.test.TestPresenter] 

[ERROR] Errors in 'gen/com/gwtplatform/mvp/client/DesktopGinjectorProvider.java' 
[ERROR] Line 8: Failed to resolve 'com.gwtplatform.mvp.client.DesktopGinjector' via deferred binding 
[WARN] For the following type(s), generated source was never committed (did you forget to call commit()?) 

[WARN] com.gwtplatform.mvp.client.com_gwtplatform_mvp_client_DesktopGinjectorImpl 

Я ценю любое представление о проблеме, или альтернативные решения для наличия модуля с условным включением в нашем приложении.

ответ

0

Я не использую GWTP, но просто Деятельность/Архитектура места. Я нашел следующее решение в моем случае.

Параметр конфигурации в *.gwt.xml* задается сценарием сборки, а затем анализируется в EntryPoint.

<define-configuration-property name="demoMode" is-multi-valued="true" /> 
<extend-configuration-property name="demoMode" value="false" /> 

A имеют конфигурацию представления/презентатора, основанную на этом параметре, и правильное представление инициализируется в модуле GIN.

@Provides @Singleton 
public LoginView getLoginView() { 
    if (SharedState.IS_DEMO_MODE) { 
    return new LoginViewMobileDemo(); 
    } else { 
    return new LoginViewMobile(); 
    } 
} 
0

В случае, если кто-то работает в подобную ситуацию ... то, что я в конечном итоге делаю двигался дополнительный код модуля в автономном модуль GWT, удаляя его из основного источника приложения дерева. Этот модуль затем необязательно унаследован в нашем файле .gwt.xml нашего приложения (в процессе сборки).

Даже после установки этого вопроса я все еще получал предупреждения от Gin о невозможности создания или наследования привязок. Я отслеживал это до проблемы в указанном порядке в файле приложения .gwt.xml. Я выполнял наследование до создания «gin.ginjector.modules»; как только я изменил порядок, все работало, как ожидалось.

<set-configuration-property name="gin.ginjector.modules" value="com.test.app.SharedModule"/> 

<inherits name="com.test.optional.OptionalModule" /> 

 Смежные вопросы

  • Нет связанных вопросов^_^