我在项目中使用GWT和GWTP framework。 到目前为止,所有演示者/视图的类型为singleton(每种实现类型的一个专用窗口)。现在我有一个特殊的(文档)窗口,我想为用户想要打开的每个文档创建一个新的演示者/视图(窗口)。
GWTP类com.gwtplatform.mvp.client.gin.AbstractPresenterModule
包含用于绑定非单例PresenterWidgets / Views的方法,例如与PresenterWidget工厂绑定;
但我找不到有关此GWTP PresenterWidget工厂用法的任何文档或示例。我如何实现这个PresenterWidget工厂?
答案 0 :(得分:1)
在实现自己的演示者类时,使用com.gwtplatform.mvp.client.PresenterWidget和com.gwtplatform.mvp.client.Presenter之间存在差异。
使用Presenter(带PresenterProxy)时,GWTP将演示者处理为单例。
public class MyPresenter extends Presenter<MyPresenter.MyView, MyPresenter.MyProxy>
使用PresenterWidget时,演示者将被多次实例化(如Spring原型范围)
public class MyPresenter extends PresenterWidget<MyPresenter.MyView>
然后使用com.google.inject.Provider get()来实例化演示者。使用PresenterWidget时,它将导致多个实例。使用Presenter时,将返回单例演示者。例如:
@Inject
MySecondPresenter(EventBus eventBus, MySecondView view, MySecondProxy proxy, Provider<MyPresenter> myProvider) {
super(eventBus, view, proxy, RevealType.Root);
setMyProvider(myProvider);
}
和
MyPresenter p = getMyProvider().get();
getView().addMyPresenter(p);
希望这有帮助