繁体   English   中英

如何在视图中创建演示者对象?

[英]How not to create presenter object in view?

我目前正在尝试一些MVP模式样本,并且我被告知不要在View创建具体的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。 如果是这种情况,您可能需要查看Model-View-ViewModel模式

使用视图首次创建,您可以使用IoC容器来创建Presenter:

public View(IMyPresenter presenter)
{
    InitializeComponent();
    _presenter = presenter;
}

或者,您可以首先使用模型(演示者) ,其中View以相同的方式传递给Presenter。 请参阅哪个先来,视图还是模型? 有关此主题的讨论。

或者您可以使用第三个对象将View和Presenter绑定在一起,就像Caliburn中的IBinder服务一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM