使用WinForms和MVP时应如何添加控件?

使用WinForms和MVP时应如何添加控件?,winforms,mvp,Winforms,Mvp,我们在这里使用的是MVP设计模式,我们使用的是presenter per UserControl样式 建议两种不同的演示者构造样式: 每个演示者实例化其拥有的所有子演示者。 控制器类实例化所有演示者并处理它们之间的通信。 不幸的是,没有提到视图是如何以及在哪里连接的。在另一个项目中,我使用factory模式创建演示者,并使用视图传递给他们。视图是在视图工厂中创建的,视图工厂使用相应的用户控件实例化视图,然后使用Controls.Add将这些视图添加到表单中 从我从第一个链接收集到的信息来看,Vi

我们在这里使用的是MVP设计模式,我们使用的是presenter per UserControl样式

建议两种不同的演示者构造样式:

每个演示者实例化其拥有的所有子演示者。 控制器类实例化所有演示者并处理它们之间的通信。 不幸的是,没有提到视图是如何以及在哪里连接的。在另一个项目中,我使用factory模式创建演示者,并使用视图传递给他们。视图是在视图工厂中创建的,视图工厂使用相应的用户控件实例化视图,然后使用Controls.Add将这些视图添加到表单中

从我从第一个链接收集到的信息来看,VisualStudio designer用于添加UserControls—这很好,但是演示者似乎会不必要地耦合到视图层


那么,我应该如何添加子视图并连接视图-演示者对呢?

我倾向于这样做,即在主视图中为子视图放置一个占位符,我通常使用面板控件

我总是连接我的MVP,以便演示者创建视图。从另一方面来说,我讨厌这种样式,演示者随后会公开一个返回视图的GetView方法


然后,主演示者可以创建一个子演示者以获取其视图,并告诉主视图进行渲染。这是通过主视图上的一个方法完成的,该方法将子视图添加到面板控件的控件集合。

这或多或少与我使用的方法相同,但有一个属性。不幸的是,我们编写的环境要求WinForms项目是具有启动表单的启动项目,因此至少必须有一个表单启动该过程。在尝试解耦类时,这会使它变得更加棘手。请给出演示者如何创建视图的示例代码。我一直认为视图必须创建Presenter,因为页面是第一个访问点。谢谢