(20):チュートリアル(9)〜Presenterの実装〜

Presenterの「ViewAllPresenter.cs」にページ固有のロジックを記述する。

  • (1)コントローラにあたる「AuthorsBLController」を取得。
    • ObjectBuilderのDIで設定するので、[CreateNew]属性をつけたコンストラクタを用意。
private AuthorsBLController _controller;
public ViewAllPresenter([CreateNew] AuthorsBLController controller) {
    _controller = controller;
}
  • (2)Page_Loadイベントで呼び出す処理を記述。ここではAuthorsBLControllerクラスのGetAuthorsメソッドを呼び出して、著者情報をView.Authorsに設定。
public override void OnViewLoaded() {
    View.Authors = _controller.GetAuthors();
}
    • OnViewLoadedメソッドは、親抽象で定義されているメソッド。このメソッドにはPage_Loadイベントで実行する処理を記述する。
    • Viewプロパティは、親抽クラスで定義されているプロパティ。このプロパティを介して、ページとデータの受け渡しができる。


(3)ページの初期表示時(ポストバックでない場合)に呼び出す処理を記述。

public override void OnViewInitialized() {
    // 特に初期処理なし
}
    • OnViewInitializedメソッドは、親抽象クラスで定義されているメソッド。このメソッドにはPage_Loadイベントで非PostBack時に実行するべき処理を記述する。

完成コードは次の通り。

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Practices.ObjectBuilder;
using Microsoft.Practices.CompositeWeb;

namespace MyWcsf.AuthorsBL.Views {
    public class ViewAllPresenter : Presenter<IViewAll> {

        //コントローラのプロパティ(DIにて設定)
        private AuthorsBLController _controller;
        public ViewAllPresenter([CreateNew] AuthorsBLController controller) {
            _controller = controller;
        }

        //Page_Load時に呼び出されるメソッド
        public override void OnViewLoaded() {
            View.Authors = _controller.GetAuthors();
        }

        //Page_LoadかつPostBackでない場合に呼び出されるメソッド
        public override void OnViewInitialized() {
            // 特に初期処理なし
        }

    }
}