在C#中显示来自演示者的表单

时间:2013-04-28 18:08:54

标签: c# .net winforms mvp

我有更多的架构问题。我正在尝试在C#中实现MVP,如下所示:

  • IView创建Presenter
  • IPresenter有一个属性IView,它保存与之绑定的View
  • 查看可以是表单,但是Presenter不区分表单和非表单类型,因此可以交换View并且解决方案是可测试的

我有时需要做的是打开其他形式。例如,我使用DataGrid浏览器视图,当我双击网格项或选择某个内容并单击编辑按钮时,会引发编辑事件并且Presenter会起作用。

现在,Presenter需要打开一个Editor视图,它也是一个Form,但是问题是,演示者不应该构造Form本身,因为那样就不可能模拟View。 / p>

我正在努力适应这个概念。我的代码看起来像这样:

var editorView = new EditorForm();
editorView.Presenter.Entity = SelectedEntity;
editorView.ShowDialog(View as Form);

在幕后,EditorForm构造函数构造演示者并将 this (View实例)分配给演示者:

public EditorForm()
{
    Presenter = new EditorPresenter(this);
    InitializeComponents();
}

从View的角度来看,我可以简单地通过实现Mock然后从MockView的构造函数中实例化相同的Presenter来将它交换到MockView。

我在这里和网上搜索其他一些Q& A但没有找到合适的。

感谢您的所有提示。

2 个答案:

答案 0 :(得分:0)

如果我理解你的观念, 我建议您按照主视图的方式根据MVP模式投影编辑演示文稿问题。 因此,创建IEditView和EditPresenter,最后在主演示者中创建EditPresenter的实例。通常通过其演示者控制编辑视图。

答案 1 :(得分:0)

在与一些朋友进行了一些头脑风暴之后,我们得出结论,处理实例化不同的生产视图集(FormViews)和不同的测试集(MockViews)的情况的最佳方法是在某些上下文中构建它们 - 我的情况,Spring上下文是一个选项。

到目前为止,我认为这是问题的答案。如果您有更聪明的解决方案,请随时分享!