Firstly good question. Secondly, it may not matter, much. My personal preference is to almost always wire up Presenter and View in the View.
Compare this scenario:
public class SomePresenter
{
public ShowContactView(IContactView view)
{
IContact model = new Contact();
new ContactPresenter(model, view);
view.Show();
}
}
public class AnotherPresenter
{
public ShowContactView(IContactView view)
{
IContact model = new Contact();
new ContactPresenter(model, view);
view.Show();
}
}
public class YetAnotherPresenter
{
public ShowContactView(IContactView view)
{
IContact model = new Contact();
new ContactPresenter(model, view);
view.Show();
}
}
public partial class ContactView : Form, IContactView
{
public ContactView()
{
InitializeComponent();
}
}
to this:
public class SomePresenter
{
public ShowContactView(IContactView view)
{
view.Show();
}
}
public class AnotherPresenter
{
public ShowContactView(IContactView view)
{
view.Show();
}
}
public class YetAnotherPresenter
{
public ShowContactView(IContactView view)
{
view.Show();
}
}
public partial class ContactView : Form, IContactView
{
public ContactView()
{
InitializeComponent();
new ContactPresenter(new Contact(), this);
}
}
As you can see that the latter has much lesser code duplication. Of course that's silly duplication or you could say you can move common functionality to a shared function, but you get the point, that's just an example.. That's when you will have the same View to be instantiated at multiple parts of your application.
Furthermore, the advantage of View knowing the Presenter is that you only need to reference Presenter in your View project, so you can re-use the same Presenter in different UI applications. Otherwise you will need to reference every View project in the Presenter..
But what's more important is to see how the different models fit your case. To be honest, there are more possibilities even. See this duplicate question.