在我们添加到数据库时要验证数据是否符合我们所要求的格式。但我们又不知道有多少数据后数据验证的方法,这样我们举可以用代理来完成,以达到我们的目的。在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),并执行。

本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2006/11/17/communityserver_event_delegate.html,如需转载请自行联系原作者

[CommunityServer]事件代理相关推荐

  1. js中的事件委托或是事件代理详解(转载)

    起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...

  2. JS事件委托或者事件代理原理以及实现

    事件委托(事件代理)原理:简单的说就是将事件交由别人来执行,就是将子元素的事件通过冒泡的形式交由父元素来执行. 为什么要用时间委托? 在JavaScript中,添加到页面上的事件处理程序数量将直接关系 ...

  3. JavaScript基础学习--事件代理

    一.JavaScript原生事件代理 var item = document.getElementById('item'); item.onclick(function(ev) {var ev = e ...

  4. 事件模型、事件流(冒泡与捕获)、事件代理

    本文原链接:https://www.cnblogs.com/hngdlxy143/p/9068282.html https://www.jb51.net/article/139997.htm 事件模型 ...

  5. js事件流、事件代理等

    菜菜的自己发现真的啥都不太懂 - 虽然啥都会一点,但是却什么都不精通. 偶然看见js事件流和事件代理等 - 黑人问号脸,虽然在实际写代码的时候经常用到. 做个总结: 都是学的别人的. 事件代理:通过将 ...

  6. “约见”面试官系列之常见面试题第三十四篇之事件冒泡、事件捕获、事件代理(建议收藏)

    对于事件的传播机制,Netscape Communicator采用的是事件捕获(event capture),IE9.Safari.Chrome.Opera和Firefox采用的是事件冒泡(event ...

  7. JavaScript事件代理和委托

    2019独角兽企业重金招聘Python工程师标准>>> 浏览器的事件冒泡 当事件发生后,这个事件就要开始传播.例如我们点击一个按钮时,就会产生一个click事件,但这个按钮本身不能处 ...

  8. 设计模式 试试 ( 事件代理 + factory Method+singleton+Observer)

    源码下载 这个是 昨天 练习 事件代理 的时候想到 的. 于是今天就 试一把 由于昨天 写的 那个程序 基本功能: 在 Cat 类对象 Shout()  之后  订阅 事件 的 所有 Mouse 类对 ...

  9. 断点vue_vue 事件代理

    就是比如说: 有一个对象 a,他里面有个属性为 b(他是个对象):我们想操作 b 里面的属性,通常是这样的: const a = { b: { name: 'bbb' }}// 操作 name 通常做 ...

最新文章

  1. 浅谈 EHT 黑洞照片拍摄原理
  2. 3台机器配置hadoop集群_Hadoop学习之路(三)Hadoop集群搭建和简单应用
  3. Java Web学习(五)session、cookie、token
  4. C++ 学习基础篇(一)—— C++与C 的区别
  5. 【HDU - 1754】I Hate It (线段树模板 单点覆盖更新+区间最大值查询)
  6. Python - 遍历列表时删除元素的正确做法
  7. java mail 接受QQ邮箱未读的邮件
  8. H计算机语言吗,计算机考研面试------编程语言
  9. 一个简单的fftw3例子:正弦信号的离散傅里叶变换
  10. 在地图上点击一下,在图层上画一个点,并显示相关的信息
  11. paip.表格化CSV输出
  12. fterm linux ssh 乱码,用fterm ssh时出现如下乱码,请问如何解决
  13. STM32CubeIDE Audio播放音频 WM8978 + I2S + DMA双缓存模式
  14. 国产矢量绘图软件--百绘大师
  15. 计算机类的本科学校有哪些专业考研,计算机专业考研学校推荐有哪些
  16. Egencia smartmix航班排名模型背后的运营研究
  17. 服务器运维的工作内容及职责
  18. iOS字体 动态下载系统提供的多种中文字体
  19. 业余草站长告诉你:网站被克隆了怎么办?
  20. 2021AIOps挑战赛|基于移动通信网络运维中的多指标时空序列预测

热门文章

  1. VSS2005下载地址
  2. Spark源码阅读02-Spark核心原理之作业执行原理
  3. 机器学习基础专题:逻辑回归
  4. CommonsMultipartFile 转为 File 类型
  5. elastic date时区问题解决办法
  6. Linux一行命令处理批量文件
  7. 对不队—— Alpha冲刺
  8. Django进阶Model篇001 - mysql 数据库的配置
  9. [HDOJ1301]Jungle Roads
  10. 40多个漂亮的网页表单设计实例