MVP GWT - 注入EventBus的问题

时间:2011-07-03 13:01:38

标签: gwt dependency-injection mvp

奇怪的问题,当我注入EventBus时,e得到了一个异常。该项目是gwt使用mvp

以下是示例代码。

杜松子酒

public interface AppGinjector extends Ginjector
{
  EventBus getEventBus();
  PlaceManager getPlaceManager();
}

这是切入点

public class MvpEntryPoint implements EntryPoint
{
AppGinjector ginjector = GWT.create(AppGinjector.class);

public void onModuleLoad()
{

  EventBus eventBus = ginjector.geEventBus();
  HelloWorldPanel display = new HelloWorldPanel();
  HelloWorldPresenter presenter = new HelloWorldPresenter( display, eventBus );

  presenter.bind();

  RootPanel.get().add( presenter.getDisplay().asWidget() );

  PlaceManager placeManager =  ginjector.getPlaceManager();
  placeManager.fireCurrentPlace();

}

我使用gin 1.0,gwt-presenter

有什么想法?

由于

编辑:

例外是

ERROR: Deferred binding result type 'net.customware.gwt.presenter.client.EventBus' should not be abstract. 
ERROR: Unable to load module entry point class com.gmgsys.mvpEntryPoint.client.MvpEntryPoint (see associated exception for details). java.lang.RuntimeException: Deferred binding failed for 'net.customware.gwt.presenter.client.EventBus' (did you forget to inherit a required module?)
...........................

也是gwt.xml

  <!-- Specify the app entry point class.                   -->
    <entry-point class='com.gmgsys.mvpEntryPoint.client.MvpEntryPoint'/>
    <inherits name='net.customware.gwt.presenter.Presenter' />
    <inherits name="com.google.gwt.inject.Inject" />

1 个答案:

答案 0 :(得分:4)

我认为你缺少AbstractPresenterModule类,它确保EventBus绑定到SimpleEventBus:

bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);

应该是这样的:

public class MyClientModule extends AbstractPresenterModule {
  protected void configure() {
     bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
     // more bindings here
  }
}

你必须注释你的Ginjector

@GinModules({ MyClientModule .class })
public interface AppGinjector extends Ginjector
{
  EventBus getEventBus();
  PlaceManager getPlaceManager();
}