Исходя из этого, я буду менять все путем инвертирования зависимостей.Теперь представление не создает экземпляр презентатора, но его вводит сам презентатор следующим образом:
public MyPresenter(IView myView, Model myModel)
{
this.View = myView;
this.View.Presenter = this;
this.Model = myModel;
}
Пока все хорошо.Теперь со стороны View, Presenter представлен как свойство «Только запись», поэтому его нельзя изменить с помощью View, но его можно использовать только:
public class MyView : IView
{
public MyPresenter Presenter { get; private set; }
}
Пока все хорошо.Теперь IoC сделает это:
var view = IoC.Resolve<IView>();
var model = repository.GetModel(); // or new Model();
var presenter = IoC.Resolve<MyPresenter>(); //view and model injected
presenter.ShowView();
var result = presenter.Model;
Для меня это выглядит красиво, но я просто хочу быть уверен, что я не нарушаю логику MVP.