我有一个新项目,其中使用了GWT视图,如Composite等。
我使用GinInjector将主菜单中的项目(如下面的ProductList
)注入。这很好用!
在某个地方,我想从一个小组件引用我的主菜单中的一个项目以便更新它。我尝试通过以下方式进行注入:
public class ProductForm extends Composite {
...
@Inject
ProductList list;
....
}
但是当我使用list
时,总是得到null
。而ProductList
的定义如下:
public class MyModule extends AbstractGinModule {
...
@Override
protected void configure() {
bind(ProductList.class).asEagerSingleton();
bind(ProductForm.class).asEagerSingleton();
}
...
}
请问我哪里做错了?!
解决方案: 我忘记说明ProductForm是ProductList的元素,使用UIBinder的@UIField标签。因此,注入将创建一个新对象,而不是使用UIBinder创建的对象。
我不得不重构我的代码,包括Presenter和事件总线,以便视图之间不需要直接引用(除了@UIField属性)。