gpt4 book ai didi

gwt - 将 gwt ui-binding 与 google-gin 结合使用

转载 作者:行者123 更新时间:2023-12-04 06:02:52 27 4
gpt4 key购买 nike

有没有办法在通过 ui 绑定(bind)创建的小部件中使用依赖注入(inject)?

假设我有一个简单的小部件(在 com.example.client.ui.widget 包中):

public class Foo extends Composite {

private final EventBus eventBus;

@Inject
public Foo(final EventBus eventBus) {
this.eventBus = eventBus;
// create ui
}
}

然后我有一个通过使用此小部件的 ui 绑定(bind)定义的 View 。例如:
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:app='urn:import:com.example.client.ui.widget'>

<g:HorizontalPanel>
<app:Foo/>
</g:HorizontalPanel>
</ui:UiBinder>

这样做是行不通的,因为 ui 绑定(bind)中使用的小部件的无参数构造函数约束。但是,如果 GWT 编译器在有 @Inject 注释的情况下只使用 GIN,那不是很好吗?或者这可以通过任何其他方式完成吗?也许我完全错过了 GIN 和 GWT 的概念,如果是这样,任何提示都非常感谢。

提前致谢,
马库斯

最佳答案

如果您需要为小部件注入(inject)依赖项,那么您做错了。



可以使用 GIN 将一些东西注入(inject)到您的小部件中。

考虑以下几点:
GIN 是一个独立的依赖注入(inject)框架,你只要问你需要什么,GIN 就会创建一个解析依赖的 bean。仅当从 Ginjector 实例获得对象时才会执行注入(inject)。
UI binder 是一个声明式 UI 框架,它基于您的 XML 创建小部件(并做了很多其他的事情,但我们现在可以忽略它)。

所以如果我们想使用 GIN 将依赖注入(inject)到 Widget 中,则意味着 Widget 应该由 GIN 创建,而不是 UiBinder。 UiBinder 必须使用 GIN 提供的实例。是否可以?
是的,UiBinder 通过以下方式允许它:

在小部件字段上使用注释 @UiField(provided=true)

或者

使用 @UiFactory

因此,您需要做的是在 GinModule 中为小部件创建绑定(bind),通过 Ginjector 获取它的实例或为小部件注入(inject)提供程序,而不是通过 @UiField(provided=true) 或 @UiFactory 将小部件实例提供给 UiBinder。

关于gwt - 将 gwt ui-binding 与 google-gin 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8732270/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com