我的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
对RequestFactorySource
进行单元测试,我宁愿使用以下内容初始化RequestFactory
:
requestFactory.initialize(eventBus, new InProcessRequestTransport(processor));
这就是问题所在。我可以在范围MyRequestFactory
中绑定Singleton
(生成的实例是否保留任何状态?),并使用我的单例EventBus
进行全局初始化(它是否依赖于Activity
EventBus
?) - 后果是什么?我假设注入MyRequestFactory
的{{1}}实例已初始化为生产或测试。另一种解决方案是在MyPresenter
中注入一些额外的RequestFactory
初始化策略,但是有必要吗?
答案 0 :(得分:1)
RequestFactory
设计,可用作单身。
假设您还有一个应用程序范围的事件总线,它的工作方式与您今天使用的相同:RequestFactory仅发布到事件总线,它不会监听事件。