Я реализовал свою собственную копию шаблона презентатора представления модели (в духе фабрики программного обеспечения веб-клиента), чтобы я мог использовать свою собственную структуру DI вместо привязки к ObjectBuilder WCSF, с которым у меня были многочисленные проблемы. У меня есть несколько способов сделать это, но ни один из них не делает меня счастливым. Я хотел знать, есть ли у кого-нибудь еще какие-нибудь идеи.
Раствор № 1а
Использует HttpModule для перехвата контекста. PreRequestHandlerExecute для вызова ObjectFactory.BuildUp (HttpContext.Current.Handler)
public partial class _Default : Page, IEmployeeView
{
private EmployeePresenter _presenter;
private EmployeePresenter Presenter
{
set
{
_presenter = value;
_presenter.View = this;
}
}
}
Решение # 1b
Вызовите наращивание при загрузке страницы вместо использования HttpModule
public partial class _Default : Page, IEmployeeView
{
private EmployeePresenter _presenter;
private EmployeePresenter Presenter
{
set
{
_presenter = value;
_presenter.View = this;
}
}
protected void Page_Load(object sender, EventArgs e)
{
ObjectFactory.BuildUp(this);
}
}
Решение # 1c
Доступ к презентатору через свойство позволяет Getter в BuildUp, если необходимо.
public partial class _Default : Page, IEmployeeView
{
private EmployeePresenter _presenter;
public EmployeePresenter Presenter
{
get
{
if (_presenter == null)
{
ObjectFactory.BuildUp(this);
}
return _presenter;
}
set
{
_presenter = value;
_presenter.View = this;
}
}
}
Решение № 2
public partial class _Default : Page, IEmployeeView
{
private EmployeePresenter _presenter;
private EmployeePresenter Presenter
{
get
{
if (_presenter == null)
{
_presenter = ObjectFactory.GetInstance<EmployeePresenter>();
_presenter.View = this;
}
return _presenter;
}
}
}
Решение # 2b
public partial class _Default : Page, IEmployeeView
{
private EmployeePresenter _presenter;
private EmployeePresenter Presenter
{
get
{
if (_presenter == null)
{
Presenter = ObjectFactory.GetInstance<EmployeePresenter>();
}
return _presenter;
}
set
{
_presenter = value;
_presenter.View = this;
}
}
}
Редактировать : добавлено решение 1с, 2b