簡體   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