我的 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,但有必要吗?