zoukankan      html  css  js  c++  java
  • CS前置/后置事件框架

             把CommunityServer的事件框架应用到当前的项目中,可以在一个方法调用中设置其前置和后置事件,从而把一个额外的业务处理外置到别的模块中进行独立处理。
    1、需要定义一系列的委托,如public delegate void PSPRoleEventHandler(PRole pRole, PSEventArgs e);委托参数的定义决定以后事件的参数,这里的PSEventArgs用于表示一些通用的参数传入,例如ObjectState针对对象操作的状态。

        public enum ObjectState
        
    {
            Create,
            Update,
            Delete,
            None,
            Runtime
        }

        public class PSEventArgs : EventArgs
        
    {
            
    private ObjectState _state;

            
    public ObjectState State
            
    {
                
    get return _state; }
            }


            
    public PSEventArgs(ObjectState state)
            
    {
                _state 
    = state;
            }


            
    public PSEventArgs() : this(ObjectState.None) { }
        }

    2、创建PSApplication类,用于统一定义一些事件,并从配置文件的模块配置加载这些事件的真实调用,以下为一下例子:
        public class PSApplication
        
    {
            
    private members

            
    Event Keys (static)

            
    cnstr

            
    PRole Events
        }


    其中的internal static PSApplication Instance()方法用于实例化PSApplication对象并从配置文件中加载事件真实实现的模块信息,例如模块配置可以写成这样:
    <Configurations>
        
    <PSModules>
            
    <add name="PRoleModule" type="CSDN.PermissionService.Components.PRoleModule, CSDN.PermissionService.Components" />    
        
    </PSModules>
    </Configurations>
    这样通过组件CSDN.PermissionService.Components中的CSDN.PermissionService.Components.PRoleModule模块就可以加载对角色操作的一些前后事件的功能
    public event PSPRoleEventHandler PrePRoleUpdate 添加或移除在PRole数据保存到数据库之前的触发事件
    public event PSPRoleEventHandler PRoleUpdate 添加或移除在PRole数据保存到数据库之后的触发事件
    private EventHandlerList Events = new EventHandlerList(); 用于保存一下委托的事件列表

    对于模块设计需要定实现一个IPSModule接口
        public interface IPSModule
        
    {
            
    void Init(PSApplication psa, XmlNode node);
        }
    例如:PRoleModule
        public class PRoleModule : IPSModule
        
    {

            
    public void Init(PSApplication psa, System.Xml.XmlNode node)
            
    {
                psa.PrePRoleUpdate 
    += new PSPRoleEventHandler(psa_PrePRoleUpdate);
                psa.PRoleUpdate 
    += new PSPRoleEventHandler(psa_PRoleUpdate);
            }



            
    private void psa_PrePRoleUpdate(PRole pRole, PSEventArgs e)
            
    {
                
    //前置事件
            }


            
    private void psa_PRoleUpdate(PRole pRole, PSEventArgs e)
            
    {
                
    //后置事件
            }


        }
    在模块里可以注册一些相关的事件,并且实现这些事件,以把一些前置或后置处理外置到主业务体外。
    对于PSEvents是些方法调用的封装:
        public class PSEvents
        
    {
            
    PRoles
        }

  • 相关阅读:
    Android OpenGL ES和OpenGL一起学(二)------理解Viewport(视口)和坐标系Android OpenGL ES篇(转帖)
    CSOM中如何取到managed metadata类型字段的类型信息
    "Value does not fall within the expected range" with managed metadata fields
    GLFW_KEY_KP_ADD和GLFW_KEY_KP_SUBTRACT
    OPENGL: WHY IS YOUR CODE PRODUCING A BLACK WINDOW?
    (转)真正的中国天气api接口xml,json(求加精) ...
    Mongo如何在多个字段中查询某个关键字?
    VS2010整合NUnit进行单元测试
    ASP.NET MVC3 学习心得------路由机制
    MVC3中 ViewBag、ViewData和TempData的使用和区别
  • 原文地址:https://www.cnblogs.com/chenjunbiao/p/1760236.html
Copyright © 2011-2022 走看看