MVP主持人在回发后订阅了活动



请参阅下面的更新以获得更简短的描述

我对基于事件的MVP方法有意见。我有以下设置:

public class MeetingPresenter : IMeetingPresenter
{
     IViewMeeting;
     public MeetingPresenter(IViewMeeting view)
    {
        this.View = view;
        PopulateViewData();
        this.View.MeetingSavedClicked += OnMeetingSavedClicked;
    }
    public void PopulateViewData()
    {
         Imeeting meeting = service.GetMeeting();
         view.SetMeetingDate(meeting.date);
     }
    private void OnMeetingSavedClicked() 
    {
         service.SaveMeeting(view.GetMeeting());
     }
}

public interface IViewMeeting
{
     void SetMeetingDate(Datetime date);
     IMeeting GetMeeting();
     event Action MeetingSavedClicked;
}

然后查看:(用vb编写)

Partial Class MeetingPage
Inherits System.Web.UI.Page
Implements IViewMeeting
{
         Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
           If Not IsPostBack Then
               Presenter = New MeetingPresenter(Me)
           Else
          End If
       End Sub
       Private _presenter As IMeetingPresenter
       Public Property Presenter() As IMeetingPresenter
       Get
           Return _presenter
       End Get
       Set(ByVal value As IMeetingPresenter)
           _presenter = value
       End Set
      End Property
       Public Sub SetMeetingDate(ByVal date As Datetime) Implements IMeetingVisits.SetMeetingDate
           lblMeetingDate.Text = date.Date.ToString()
        End Sub
 }
       //Not implementing this fully - should get the idea
       public Function GetMeeting as IMeeting Implements IMeetingVisits.GetMeeting
       end function
       Event MeetingSavedClicked As Action Implements IViewMeeting.MeetingSavedClicked

       Public Sub btnSaveMeeting_Click(ByVal sender As Object, ByVal e As System.EventArgs)
           RaiseEvent MeetingSavedClicked()
        End Sub
  • 在继续之前,我意识到我可以去掉视图中的依赖项等,并且任何模型都应该是特定于视图的*

我遇到的问题是事件。我正在订阅演示者中的"查看"界面事件。加载后的视图将创建此演示者的具体版本,这将导致演示者填充所有视图字段。到目前为止还不错。

问题是,当MeetingSavedClicked事件通过btnSaveMeeting_Click引发时,presenter中相应的订阅方法不会被激发。这可能是因为演示者已不在内存中,因为状态在回发后不会保持。我不确定订阅演示者活动是否会以某种方式让它留在记忆中(我真的对自定义活动了解不多),但事实似乎并非如此。

那么,唯一的选择是将演示者存储在视图状态或会话中吗?这是否意味着事件订阅仍将存在并执行?

如果这看起来很基本,我很抱歉,但我对赛事、MVP等有点新手。

更新也许我可以更清楚一点:

我的webform实现了一个具有操作事件的接口。

Web窗体创建一个自定义对象,该对象具有订阅此接口事件的方法。

在回发时,在webform上引发一个点击事件(代码隐藏),这反过来又引发实现的接口事件。

现在,自定义对象不再在webform的状态内存中,因为我们正在回发(并且自定义对象不存储在会话或视图状态中)。

我订阅的处理程序是否仍然存在并能够捕获此引发的事件?或者在回邮时它们已经被"处理"了

谢谢。

回发中使用的页面对象是一个全新的页面对象。它根本没有连接到您的旧页面对象。为了解决你的问题,你必须重新创建你的演示者,你必须再次连接事件。

从技术上讲,如果垃圾收集器还没有收集到旧的页面对象和演示者对象,以及它们之间的事件处理程序可能仍在内存中。但是没有对这些对象的引用,它们将/可能在下一次GC运行中被收集。

相关内容

  • 没有找到相关文章

最新更新