C# 如何不在视图中创建presenter对象?
我目前正在试用一些MVP模式示例,有人告诉我不要在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
视图中创建具体的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。