我的 GWT 应用程序遵循 MVP 模式,将单例EventBus和Display+Presenter绑定在一起Activity(在 GIN 的帮助下):
public class MyActivity implements Activity {
  @Inject MyDisplay display; //usually bound in Singleton scope
  @Inject MyPresenter presenter;
  ...
  @Override
  public void start(AcceptsOneWidget panel, EventBus eventBus) {
    diplay.bindPresenter(presenter);
    presenter.start(eventBus);
    panel.setWidget(display);
  }
  ...
}
通常我会使用 GIN将新的特定实例注入RequestFactory特定的实例。Presenter我的演示者有start()方法,我可以传递EventBus代表Activity( ResettableEventBus) 创建的实例。
public MyPresenter {
  @Inject MyRequestFactory requestFactory;
  public void start(EventBus eventBus) {
    requestFactory.initialize(eventBus);
    ...
  }
  ...
}
我认为让 GIN 创建和注入MyRequestFactory. 但是如果我想对MyPresenterusing进行单元测试RequestFactorySource,我宁愿需要初始化RequestFactoryusing:
requestFactory.initialize(eventBus, new InProcessRequestTransport(processor));
问题来了。我可以MyRequestFactory在范围内绑定Singleton(生成的实例是否保持任何状态?),并用我的单例全局初始化它EventBus(它是否取决于Activity's EventBus?) - 后果是什么?我假设MyRequestFactory注入到的实例MyPresenter已经为生产或测试初始化。另一种解决方案是在 中注入一些额外的RequestFactory初始化策略MyPresenter,但有必要吗?