[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),并执行。
小弟入道不久,学艺不精,如果有所错误,经脉逆转,欢迎解救!
分类:
CommunityServer
, ASP.NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架