Presenter の抽象クラスを作成しました
public abstract class MvpPresenter<T>
{
public T View { get; set; }
public MvpPresenter()
{
}
public MvpPresenter(T view)
{
View = view;
}
}
および抽象プレゼンターから継承する UserPresenter クラス
public class UserPresenter2 : MvpPresenter<IUserView>
{
private void OnUserSave(object sender, EventArgs e)
{
if (View.ContextData.IsDirty)
{
User user = new User();
User domainUser = DataMapper.Translate(View.ContextData);
new UserServiceStub().SaveUser(domainUser);
}
}
private void OnUserSearch(object sender, SearchEventArgs e)
{
if (string.IsNullOrEmpty(e.SearchCriteria))
{
View.StatusMessage = "User name can not be null";
return;
}
User user = new UserServiceStub().GetUser(e.SearchCriteria);
if (user == null)
{
View.StatusMessage = String.Format(
"There's no user found for user name:{0}", e.SearchCriteria);
return;
}
UserDTO userDTO = DataMapper.Translate(user);
View.ContextData = userDTO;
}
}
ビューのコード:
public abstract class MvpView<TPresenter, TView> : Page
where TPresenter : MvpPresenter<TView>
{
public TPresenter Presenter { get; set; }
public MvpView()
: base()
{
if (!(this is TView))
throw new Exception("MvpView must implement the interface provider as generic TView type");
// Create and initialize presenter
Presenter = Activator.CreateInstance<TPresenter>();
Presenter.View = (TView)((object)this);
}
}
問題は、ユーザーが検索をクリックしたときに、ページが応答しなかったことです。検索イベントがまだビューに登録されていないことはわかっていますが、コンストラクターでは実行できません。