我的 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
. 但是如果我想对MyPresenter
using进行单元测试RequestFactorySource
,我宁愿需要初始化RequestFactory
using:
requestFactory.initialize(eventBus, new InProcessRequestTransport(processor));
问题来了。我可以MyRequestFactory
在范围内绑定Singleton
(生成的实例是否保持任何状态?),并用我的单例全局初始化它EventBus
(它是否取决于Activity
's EventBus
?) - 后果是什么?我假设MyRequestFactory
注入到的实例MyPresenter
已经为生产或测试初始化。另一种解决方案是在 中注入一些额外的RequestFactory
初始化策略MyPresenter
,但有必要吗?