Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何不在视图中创建presenter对象?_C#_Design Patterns_Mvp - Fatal编程技术网

C# 如何不在视图中创建presenter对象?

C# 如何不在视图中创建presenter对象?,c#,design-patterns,mvp,C#,Design Patterns,Mvp,我目前正在试用一些MVP模式示例,有人告诉我不要在视图中创建具体的Presenter对象。有没有办法动态创建Presenter对象 public partial class View: Window, IView { private Presenter _presenter; public View() { InitializeComponent(); _presenter = new Presenter(this); //Asked to

我目前正在试用一些MVP模式示例,有人告诉我不要在
视图中创建具体的
Presenter
对象。有没有办法动态创建
Presenter
对象

public partial class View: Window, IView
{
   private Presenter _presenter;

    public View()
    {
        InitializeComponent();
        _presenter = new Presenter(this); //Asked to avoid this
    }
}

你想错了。您不会在视图中创建演示者。您可以在其他位置(应用程序启动、其他演示者)创建它,并将其自身作为构造函数参数或通过设置属性传递给视图

像这样:

class FooView : IFooView
{
    private readonly IFooPresenter presenter;

    public FooView(IFooPresenter presenter)
    {
        this.presenter = presenter;
    }
}

class FooPresenter1 : IFooPresenter
{
    private readonly IFooView view;

    public FooPresenter1()
    {
        view = new FooView(this);
    }
}
// or
class FooPresenter2 : IFooPresenter
{
    private readonly IFooView view;

    public FooPresenter2(IFooView view)
    {
        this.view = view;
        view.Presenter = this;
    }
}

顺便说一下,您似乎正在使用WPF。如果是这样的话,你可能想看一看这本书。

你想错了。您不会在视图中创建演示者。您可以在其他位置(应用程序启动、其他演示者)创建它,并将其自身作为构造函数参数或通过设置属性传递给视图

像这样:

class FooView : IFooView
{
    private readonly IFooPresenter presenter;

    public FooView(IFooPresenter presenter)
    {
        this.presenter = presenter;
    }
}

class FooPresenter1 : IFooPresenter
{
    private readonly IFooView view;

    public FooPresenter1()
    {
        view = new FooView(this);
    }
}
// or
class FooPresenter2 : IFooPresenter
{
    private readonly IFooView view;

    public FooPresenter2(IFooView view)
    {
        this.view = view;
        view.Presenter = this;
    }
}
顺便说一下,您似乎正在使用WPF。如果是这种情况,您可能需要查看演示文稿。

使用视图优先创建,您可以使用IoC容器创建演示文稿:

public View(IMyPresenter presenter)
{
    InitializeComponent();
    _presenter = presenter;
}
或者,您可以首先使用模型(presenter),其中视图以大致相同的方式传递给presenter。有关此主题的讨论,请参阅

或者,您可以使用第三个对象将视图和演示者绑定在一起,如Caliburn中的。

使用视图优先创建,您可以使用IoC容器创建演示者:

public View(IMyPresenter presenter)
{
    InitializeComponent();
    _presenter = presenter;
}
或者,您可以首先使用模型(presenter),其中视图以大致相同的方式传递给presenter。有关此主题的讨论,请参阅


或者可以使用第三个对象将视图和演示者绑定在一起,如Caliburn中的。

这在webforms中不起作用。视图是第一个处理请求的视图,因此它必须创建演示者。@epitka:我讨厌webforms。但这一点仍然有效。我只是假设他在做一些桌面工作,因为他的视图继承自Windows。这在webforms中不起作用。视图是第一个处理请求的视图,因此它必须创建演示者。@epitka:我讨厌webforms。但这一点仍然有效。我只是假设他在做一些桌面的事情,因为他的视图继承自Windows。