[CommunityServer]事件代理

  在我们添加到数据库时要验证数据是否符合我们所要求的格式。但我们又不知道有多少数据后数据验证的方法,这样我们举可以用代理来完成,以达到我们的目的。在CommunityServer中的代理易于扩展,值得我们学习学习,下面我们来看看他是怎么个执行过程。
  
  1.CSApplication.cs:这个文件中包含了所有代理事件,极其事件代理方法类的初始化。

 1      Delegates

  以上代理就是相对应事件的处理方法,而这些代理的方法类必须继承ICSModule接口,以得到相对应得处理方法。在CSApplication的构造函数中我们可以看到,从配置文件中获取"CommunityServer/csmodules"节点的数据并进行实例化,如果不成功将会抛出错误,并将得到的实例列表缓存。

  2.CSEventArgs.cs:这个文件中包含了CSEventArgs,CSPostEventArgs,CSAcceptUserInvitationEventArgs事件。CSEventArgs是CommunityServer所有事件的基类,继承于EventArgs;CAPostEventArgs是关于Post的事件,所有发布的帖子或文章等所引发的事件,继承于CSEventArgs类;CSAcceptUserInvitationEventArgs当邀请某个用户加入会员是所引发的事件,继承于CSEventArgs类。各个事件都包含各自的数据。

  3.ICSModule.cs:这个文件包含了ICSModule接口,只有一个方法,可以通过继承这个接口定义事件处理方法,并在配置文件中的"CommunityServer/csmodules"节点标示,使得能够被CSApplication类实例化。

 4.CSEvents.cs:包含验证的静态方法,我们可以调用这里的方法即可实现我们所想得到的结果。

  下面我们来看一下执行的顺序(比如我们要加入一个用户):首先我们调用CSEvents.BeforeUser(User user, ObjectState state)来验证我们的用户数据;CSEvents.BeforeUser(User user, ObjectState state)有调用CSApplication.Instance().ExecutePreUserUpdate(user,state),从CSApplication类中文们可以知道:CSApplication.Instance()先从缓存中搜索CSApplication对象,如果不存在则加载配置文件中的"CommunityServer/csmodules"节点的数据并进行实例化,如果不成功将会抛出错误,并将得到的实例列表缓存;初始化后我们可以知道ExecutePreUserUpdate(user,state)方法所对应的键值在EventHandlerList处理方法中所对应的事件,因此把数据传输给public event CSUserEventHandler PreUserUpdate事件在CSApplication中所对应的处理方法类public class CSValidationModule : ICSModule;从而得到了事件处理的方法:private void csa_PreUserUpdate(User user, CSEventArgs e),并执行。

  小弟入道不久,学艺不精,如果有所错误,经脉逆转,欢迎解救!
原文地址:https://www.cnblogs.com/xdotnet/p/communityserver_event_delegate.html