使用GWTP/Gin,可以在編譯期間選擇性地安裝模塊嗎?在「開發」模式下運行時,我們希望有一個演示者和視圖僅在應用程序中可用,其中該模式由.gwt.xml文件中的標誌(由構建設置)確定。可選模塊安裝
以前,我們用MVC架構上運行的GXT,並會盡我們的模塊中的以下內容:
<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
我明白任何洞察問題,或在我們的應用程序中使用「有條件地包含」模塊的替代解決方案。