私はthis tutorialの推奨に従ってGWTアプリケーションを実装しました。私もサンプルコードをダウンロードしました。デモのすべてのプレゼンターは、インスタンス化される主プレゼンターコンストラクターに注入する必要があることに気付きました。著者はソースでこれを含める:GWT/Gin Presenterのインスタンス化
public class GreetingPresenter extends WidgetPresenter<GreetingPresenter.Display> {
// FUDGE FACTOR! Although this is not used, having GIN pass the object
// to this class will force its instantiation and therefore will make the
// response presenter listen for events (via bind()). This is not a very good way to
// achieve this, but I wanted to put something together quickly - sorry!
private final GreetingResponsePresenter greetingResponsePresenter;
@Inject
public GreetingPresenter(final Display display, final EventBus eventBus, final DispatchAsync dispatcher, final GreetingResponsePresenter greetingResponsePresenter) {
super(display, eventBus);
this.dispatcher = dispatcher;
this.greetingResponsePresenter = greetingResponsePresenter;
bind();
}
私はどのプレゼンターがGreetingPresenterに注入されない場合、それはインスタンス化されないことを確認しました。デモンストレーションの目的では、アプリ全体に2人のプレゼンターしかいないので、これはクールですが、実際のアプリケーションでは、これは重大な不便なことになります。
Presenterのインスタンス化を行う適切な方法は何ですか?
プレゼンターモジュール:
public class GreetingClientModule extends AbstractPresenterModule {
@Override
protected void configure() {
bind(EventBus.class).to(DefaultEventBus.class).in(Singleton.class);
bind(PlaceManager.class).in(Singleton.class);
bindPresenter(GreetingPresenter.class, GreetingPresenter.Display.class, GreetingView.class);
bindPresenter(GreetingResponsePresenter.class, GreetingResponsePresenter.Display.class, GreetingResponseView.class);
bind(AppPresenter.class).in(Singleton.class);
bind(CachingDispatchAsync.class);
}
}
Ginjector:
@GinModules({ ClientDispatchModule.class, GreetingClientModule.class })
public interface GreetingGinjector extends Ginjector {
AppPresenter getAppPresenter();
PlaceManager getPlaceManager();
}
ソースコードをダウンロードしてテストしたところ、あなたが言及したクラスが含まれていました。それでも、GreetingResponsePresenterが機能するためには、「FUDGE FACTOR」が必要でした。S –