• 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
        }

  • 相关阅读:
    _bzoj1061 [Noi2008]志愿者招募【最小费用最大流】
    _bzoj2243 [SDOI2011]染色【树链剖分】
    _bzoj1013 [JSOI2008]球形空间产生器sphere【高斯消元】
    _bzoj1002 [FJOI2007]轮状病毒【瞎搞】
    leetcode 273 Integer to English Words
    leetcode 12 Integer to Roman
    leetcode 1071 Greatest Common Divisor of Strings
    lc6 ZigZag Conversion
    lc13 Roman to Integer
    leetcode 171 Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/chenjunbiao/p/1760236.html
Copyright © 2020-2023  润新知