私の GWT アプリケーションは、 singleton を使用して MVP パターンに従いEventBus、Display+を(GIN の助けを借りて)Presenterバインドします。Activity
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 を使用して、specialの新しいインスタンスをRequestFactoryspecificに注入します。Presenter私のプレゼンターにはメソッドがあり、 ( )に代わって作成されたインスタンスstart()を渡すことができます。EventBusActivityResettableEventBus
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注入されたインスタンスMyPresenterは、本番用またはテスト用にすでに初期化されていると想定します。別の解決策は、追加のRequestFactory初期化戦略をに注入するMyPresenterことですが、必要ですか?