我正在使用MVP架构(或至少近似一个)并且具有演示者的层次结构,具有类似的嵌套视图。为简单起见,我会坚持前两个级别:
顶层的AppPresenter / AppView。 DocumentListPresenter / DocumentListView和TranslationPresenter / TranslationView在第二级。
两个第二级视图作为小部件添加到顶级视图的面板中,但此时通过将两个二级演示者注入顶级演示者,然后让顶级演示者传递他们的视图来完成通过setter方法来看待它。
这似乎是一种迂回的做事方式。 Gin是否有可能将第二级视图注入顶级视图而不会让演示者参与其中?
答案 0 :(得分:0)
我设法通过对guice代码的一个小改动(在我的本地类中重写了扩展AbstractPresenterModule来实现这个:
@Override
protected <D extends Display> void bindDisplay(Class<D> display, Class<? extends D> displayImpl)
{
bind(display).to(displayImpl).in(Singleton.class);
}
我一直在使用的bindPresenter()方法将presenter绑定为单例,并调用bindDisplay()将显示接口绑定到其实现,但后者不是单例绑定,所以我最终得到了不同的实例(一个链接到演示者,另一个链接到包含的显示类)。
重写bindDisplay()方法以使显示绑定成为单例,可确保注入另一个显示的显示实现与演示者绑定的实例相同。