[CommunityServer]事件代理
在我们添加到数据库时要验证数据是否符合我们所要求的格式。但我们又不知道有多少数据后数据验证的方法,这样我们举可以用代理来完成,以达到我们的目的。在CommunityServer中的代理易于扩展,值得我们学习学习,下面我们来看看他是怎么个执行过程。
1.CSApplication.cs:这个文件中包含了所有代理事件,极其事件代理方法类的初始化。
以上代理就是相对应事件的处理方法,而这些代理的方法类必须继承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]事件代理相关推荐
- js中的事件委托或是事件代理详解(转载)
起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...
- JS事件委托或者事件代理原理以及实现
事件委托(事件代理)原理:简单的说就是将事件交由别人来执行,就是将子元素的事件通过冒泡的形式交由父元素来执行. 为什么要用时间委托? 在JavaScript中,添加到页面上的事件处理程序数量将直接关系 ...
- JavaScript基础学习--事件代理
一.JavaScript原生事件代理 var item = document.getElementById('item'); item.onclick(function(ev) {var ev = e ...
- 事件模型、事件流(冒泡与捕获)、事件代理
本文原链接:https://www.cnblogs.com/hngdlxy143/p/9068282.html https://www.jb51.net/article/139997.htm 事件模型 ...
- js事件流、事件代理等
菜菜的自己发现真的啥都不太懂 - 虽然啥都会一点,但是却什么都不精通. 偶然看见js事件流和事件代理等 - 黑人问号脸,虽然在实际写代码的时候经常用到. 做个总结: 都是学的别人的. 事件代理:通过将 ...
- “约见”面试官系列之常见面试题第三十四篇之事件冒泡、事件捕获、事件代理(建议收藏)
对于事件的传播机制,Netscape Communicator采用的是事件捕获(event capture),IE9.Safari.Chrome.Opera和Firefox采用的是事件冒泡(event ...
- JavaScript事件代理和委托
2019独角兽企业重金招聘Python工程师标准>>> 浏览器的事件冒泡 当事件发生后,这个事件就要开始传播.例如我们点击一个按钮时,就会产生一个click事件,但这个按钮本身不能处 ...
- 设计模式 试试 ( 事件代理 + factory Method+singleton+Observer)
源码下载 这个是 昨天 练习 事件代理 的时候想到 的. 于是今天就 试一把 由于昨天 写的 那个程序 基本功能: 在 Cat 类对象 Shout() 之后 订阅 事件 的 所有 Mouse 类对 ...
- 断点vue_vue 事件代理
就是比如说: 有一个对象 a,他里面有个属性为 b(他是个对象):我们想操作 b 里面的属性,通常是这样的: const a = { b: { name: 'bbb' }}// 操作 name 通常做 ...
最新文章
- 浅谈 EHT 黑洞照片拍摄原理
- 3台机器配置hadoop集群_Hadoop学习之路(三)Hadoop集群搭建和简单应用
- Java Web学习(五)session、cookie、token
- C++ 学习基础篇(一)—— C++与C 的区别
- 【HDU - 1754】I Hate It (线段树模板 单点覆盖更新+区间最大值查询)
- Python - 遍历列表时删除元素的正确做法
- java mail 接受QQ邮箱未读的邮件
- H计算机语言吗,计算机考研面试------编程语言
- 一个简单的fftw3例子:正弦信号的离散傅里叶变换
- 在地图上点击一下,在图层上画一个点,并显示相关的信息
- paip.表格化CSV输出
- fterm linux ssh 乱码,用fterm ssh时出现如下乱码,请问如何解决
- STM32CubeIDE Audio播放音频 WM8978 + I2S + DMA双缓存模式
- 国产矢量绘图软件--百绘大师
- 计算机类的本科学校有哪些专业考研,计算机专业考研学校推荐有哪些
- Egencia smartmix航班排名模型背后的运营研究
- 服务器运维的工作内容及职责
- iOS字体 动态下载系统提供的多种中文字体
- 业余草站长告诉你:网站被克隆了怎么办?
- 2021AIOps挑战赛|基于移动通信网络运维中的多指标时空序列预测