我已经实现了我自己的模型视图演示者模式副本(在 Web 客户端软件工厂的脉络中),因此我可以利用我自己的 DI 框架,而不是绑定到我遇到很多问题的 WCSF 的 ObjectBuilder。我想出了一些方法来做到这一点,但没有一个让我特别高兴。我想知道其他人是否有其他想法。
解决方案#1a
使用 HttpModule 拦截 context.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
在页面加载中调用 buildup 而不是使用 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
如果需要,通过 Property 访问 Presenter 允许 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;
}
}
}
编辑:添加解决方案 1c、2b