Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVP监控控制器中未触发事件_C#_Design Patterns_Mvp - Fatal编程技术网

C# MVP监控控制器中未触发事件

C# MVP监控控制器中未触发事件,c#,design-patterns,mvp,C#,Design Patterns,Mvp,我已经为演示者创建了抽象类 public abstract class MvpPresenter<T> { public T View { get; set; } public MvpPresenter() { } public MvpPresenter(T view) { View = view; } } public class UserPresenter2 : MvpPresenter<IUse

我已经为演示者创建了抽象类

public abstract class MvpPresenter<T>
{
    public T View { get; set; }

    public MvpPresenter()
    {
    }

    public MvpPresenter(T view)
    {
        View = view;
    }
}
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;
    }
}
公共抽象类MvpPresenter
{
公共T视图{get;set;}
公共MvpPresenter()
{
}
公共MvpPresenter(T视图)
{
视图=视图;
}
}
和从抽象演示者继承的UserPresenter类

public abstract class MvpPresenter<T>
{
    public T View { get; set; }

    public MvpPresenter()
    {
    }

    public MvpPresenter(T view)
    {
        View = view;
    }
}
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类UserPresenter2:MvpPresenter
{
私有void OnUserSave(对象发送方,事件参数e)
{
if(View.ContextData.IsDirty)
{
用户=新用户();
User domainUser=DataMapper.Translate(View.ContextData);
新建UserServiceStub().SaveUser(domainUser);
}
}
私有void OnUserSearch(对象发送方、SearchEventArgs e)
{
if(string.IsNullOrEmpty(例如SearchCriteria))
{
View.StatusMessage=“用户名不能为空”;
返回;
}
User User=new UserServiceStub().GetUser(如SearchCriteria);
if(user==null)
{
View.StatusMessage=String.Format(
“未找到用户名:{0}”的用户,e.SearchCriteria);
返回;
}
UserDTO UserDTO=DataMapper.Translate(用户);
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);
    }
}
公共抽象类MvpView:Page
其中TPresenter:MvpPresenter
{
公共TPresenter演示程序{get;set;}
公共MvpView()
:base()
{
如果(!(这是TView))
抛出新异常(“MvpView必须将接口提供程序实现为通用TView类型”);
//创建并初始化演示者
Presenter=Activator.CreateInstance();
视图=(TView)((对象)this);
}
}

问题是当用户单击搜索时,页面没有响应。我知道搜索事件尚未在视图中注册,但我无法在构造函数中注册。

为什么不能在构造函数中注册?我已经尝试过,但仍然出现错误“没有为该对象定义无参数构造函数”,您可以发布视图的代码吗?看起来您可能没有正确构造它。但是,我建议您在传递视图实例后,在Presenter构造函数中注册事件。@rae1n,没问题,我已经为视图添加了代码。实际上,我们的想法是创建一个mvp的通用框架。所以,它不需要将视图注入presenter。