我正在尝试组合一个多项目应用程序,其中一个子项目有一个演示者的多个视图。我正在使用Gin向我的演示者注入视图。
子项目包含演示者和2个不同的视图。我有2个单独的gin模块,每个模块将其中一个视图绑定到视图界面。
根据Thomas Broyer关于this post答案的建议,我的Ginjectors被包含在一个“持有者”类中,该类调用特定ginjector上的GWT.create。使用replace-with语句在gwt.xml文件中配置适当的holder。
当我在开发模式下运行我的项目时,我看到备用视图按照我的预期显示。但是,当我编译项目时,我仍然只获得默认视图。此外,只有6个排列(由于替换逻辑,我会期望更多),并且我没有得到我在不同场景中的预期。
这里有一些代码可供说明。
Subproject.gwt.xml包含:
<replace-with class="com.example.GinjectorDesktopHolder">
<when-type-is class="com.example.GinjectorHolder" />
</replace-with>
<replace-with class="com.example.GinjectorTabletHolder">
<when-type-is class="com.example.GinjectorHolder" />
<when-property-is name="formfactor" value="tablet" />
</replace-with>
“formfactor”变量在从GWT的mobilewebapp sample project逐字复制的gwt.xml中定义。
持有人课程如下:
public abstract class GinjectorHolder {
public abstract Ginjector getGinjector();
}
public class GinjectorTabletHolder extends GinjectorHolder {
@Override
public Ginjector getGinjector() {
return GWT.create(GinjectorTablet.class);
}
}
public class GinjectorDesktopHolder extends GinjectorHolder {
@Override
public Ginjector getGinjector() {
return GWT.create(GinjectorDesktop.class);
}
}
我的Ginjectors看起来像这样:
public interface MyGinjector {
MyView getView();
EventBus getEventBus();
}
@GinModules({ModuleDesktop.class})
public interface GinjectorDesktop extends Ginjector, MyGinjector {}
@GinModules({ModuleTablet.class})
public interface GinjectorTablet extends Ginjector, MyGinjector {}
我的模块看起来像这样:
public class ModuleDesktop extends AbstractGinModule {
@Override
protected void configure() {
bind(MyPresenter.View.class).to(DesktopView.class);
}
}
public class ModuleTablet extends AbstractGinModule {
@Override
protected void configure() {
bind(MyPresenter.View.class).to(TabletView.class);
}
}
最后,在我的演示者代理中,基本上是这个特定子项目的切入点,我有这一行:
GinjectorHolder holder = GWT.create(GinjectorHolder.class);
MyGinjector ginjector = holder.getGinjector();
如前所述,当我在开发模式下运行并输入断点时,我可以看到创建了相应的GinjectorHolder。 FormFactor.gwt.xml(上面链接)提供了一个开关,用于使用URL参数切换到您想要查看的上下文。所以我可以在URL中创建formfactor = tablet并创建Tablet Ginjector Holder。
答案 0 :(得分:1)
如评论中所述,删除行
<collapse-property name="formfactor" values="*"/>
导致排列数量的预期增加。
然而,这很神秘,为什么这是必要的,因为通常应该可以折叠你喜欢的任何属性 - 这只是意味着每个浏览器必须下载更多的代码,但仍然应该得到它需要的一切。可能是一个错误。
答案 1 :(得分:0)
首先,不是将视图映射到viewimpl,而是将其绑定到viewprovider,然后根据用户代理值,您可以返回要绑定的相应实例。