私の 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の新しいインスタンスをRequestFactory
specificに注入します。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
注入されたインスタンスMyPresenter
は、本番用またはテスト用にすでに初期化されていると想定します。別の解決策は、追加のRequestFactory
初期化戦略をに注入するMyPresenter
ことですが、必要ですか?