我们的应用程序使用GIN动态实例化其GWT资源包。这样做是为了能够在运行时为不同的显示模式加载不同的样式表。一般来说,这意味着我可以使用类似MyApp.ginjector.getResources()
的东西来创建资源的单例实例,而不是标准的GWT.create(MyAppResources.class)
。
这适用于除UiBinder代码之外的所有代码。我们一直在使用<ui:with ref="res" type="com.company.MyAppResources" />
,我希望使用GIN而不是GWT.create
来创建MyAppResources
的实例。
根据GWTUiBinder文档,有两种方法可以处理此问题。在组件中使用@UiField(provided=true)
或@UiFactory
。这两种方法都是不可取的,因为它们要求我的团队中的人员(包括我自己)记住将这些样板代码放入每个小部件中。更糟糕的是,如果省略了创建代码,那么一切似乎都能正常工作,因为GWT.create
将创建我们资源的一个实例,而不是我们想要的实例。
我正在寻找一种创建某种全局@UiFactory
方法的方法,我的所有组件都将使用这种方法,它将委托给GIN。或者,挂接特定类的GWT.create
并让客户端运行时代码创建实例的某种方式也可以,因为我可以将对象创建委托给我的静态Ginjector
。
如果您有一个带有静态字段ginjector
的com.company.MyApp
,那么您可以使用:
<ui:import field="com.company.MyApp.ginjector" />
然后(假设Java中的ginjector.getResources().style().foo()
):
<span class="{ginjector.getResources.style.foo}">