我正在尝试在MVP GWT 2.4中使用Gin。在我的模块中,我有:
import com.google.web.bindery.event.shared.EventBus;
import com.google.web.bindery.event.shared.SimpleEventBus;
@Override
protected void configure() {
bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
...
}
以上代码使用新的com.google.web.bindery.event.shared.EventBus
。当我想在实现Activity的MVP活动中注入事件总线时出现问题:
package com.google.gwt.activity.shared;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
public interface Activity {
...
void start(AcceptsOneWidget panel, EventBus eventBus);
}
Activity
使用已弃用的com.google.gwt.event.shared.EventBus
。我怎样才能调和这两个?显然,如果我要求弃用的EventBus类型,那么Gin会抱怨,因为我没有为它指定绑定。
更新:这将允许应用构建,但现在有两个不同的EventBus
,这很糟糕:
protected void configure() {
bind(com.google.gwt.event.shared.EventBus.class).to(
com.google.gwt.event.shared.SimpleEventBus.class).in(Singleton.class);
bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
...
答案 0 :(得分:2)
目前已记录此问题:http://code.google.com/p/google-web-toolkit/issues/detail?id=6653
不幸的是,建议的解决方法是暂时使用代码中已弃用的EventBus
。
答案 1 :(得分:2)
我问了一个类似的问题:Which GWT EventBus should I use?
您不需要已弃用的事件总线,因为它扩展了WebBindery。
使用以下代码创建活动全部扩展的基本活动:
// Forward to the web.bindery EventBus instead
@Override
@Deprecated
public void start(AcceptsOneWidget panel, com.google.gwt.event.shared.EventBus eventBus) {
start(panel, (EventBus)eventBus);
}
public abstract void start(AcceptsOneWidget panel, EventBus eventBus);
答案 2 :(得分:1)
我认为更清洁的解决方案就是:
public class GinClientModule extends AbstractGinModule {
@Override
protected void configure() {
bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
...
}
@Provides
@Singleton
public com.google.gwt.event.shared.EventBus adjustEventBus(
EventBus busBindery) {
return (com.google.gwt.event.shared.EventBus) busBindery;
}
...
请参阅我的回答here
答案 3 :(得分:0)
我发现将新版本和旧版本绑定到同一个实例会有所帮助。
/*
* bind both versions of EventBus to the same single instance of the
* SimpleEventBus
*/
bind(SimpleEventBus.class).in(Singleton.class);
bind(EventBus.class).to(SimpleEventBus.class);
bind(com.google.gwt.event.shared.EventBus.class).to(SimpleEventBus.class);
现在,只要您的代码需要EventBus
注入代码所需的代码,并避免弃用警告。