• 另类AOP设计


    常见的AOP设计都基于Remoting的RealProxy,或者基于Emit实现的动态代理,或者基于反射的Attribute扫描拦截。但是我们还有另类的拦截方案DynamicObject,只要我们继承DynamicObject,重载几个方法即可,话不多说,上代码。

    public class DynamicProxy<T>:DynamicObject where T:class
    {
          private T _source;
          public DynamicProxy(T source){if(source==null){throw new ArgumentNullException("source");}_source=source;}
          public override bool TryInvokeMember(InvokeMemberBinder binder,object[] args,out      object result)
         {
                 Func<MethodInfo,bool> func=m=>{//filter logic code};
                 var method=_source.GetType().GetMethods().FirstOrDefault(func);
                 if(method!=null&&!method.IsAbstract)
                {
                     //MethodBeginInvokeHander?.Invoke(_source,args);
                     result=method.Invoke(_source,args);
                     //MethodEndInvokeHander?.Invoke(_source,args);
                     return true;
                }
                result=null;
                return false;
         }
    }
    

    Demo:

    public class T
    {
         public string GetName(string name){return name;}
    }
    
    class Program
    {
        static void Main(string[] args)
        {
                Dynamic<T> proxy=new Dynamic<T>(new T());
                proxy.MethodBeginInvokeHandler+=MethodBeginInvoke;
                proxy.MethodEndInvokeHandler+=MethodEndInvoke;
                dynamic d=proxy;
                d.GetName("xxx");
        }
    
        static void MethodBeginInvoke(object sender,MethodEventArgs e)
        {
               Console.WriteLine("Start Invoke:"+e.Name);
        }
        static void MethodEndInvoke(object sender,MethodEventArgs e)
        {
               Console.WriteLine("Result:"+e.Result);
        }
    }
    
  • 相关阅读:
    HIVE中内连接和左半连接不一致问题
    hive 中的Sort By、 Order By、Cluster By、Distribute By 区别
    基于MapReduce的矩阵乘法运算
    基于MapReduce的关系代数运算(2)
    基于MapReduce的关系代数运算(1)
    帖子爬取
    tomcat------https单向认证和双向认证
    struts2配置文件struts.xml的简介
    2014,事情只有一件!
    MYSQLi数据访问查询数据
  • 原文地址:https://www.cnblogs.com/kingge/p/8194024.html
Copyright © 2020-2023  润新知