モデル ビュー プレゼンター パターンの独自のコピーを (Web クライアント ソフトウェア ファクトリに沿って) 実装したので、多くの問題を抱えていた WCSF の ObjectBuilder に縛られる代わりに、独自の DI フレームワークを活用できます。私はそれを行うためのいくつかの方法を思いつきましたが、特に私を幸せにする方法はありません. 他の誰かが他のアイデアを持っているかどうか知りたかった.
解決策 #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
HttpModule を使用する代わりに、ページの読み込み時に buildup を呼び出す
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 を介してプレゼンターにアクセスし、必要に応じて 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を追加