• 另类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);
        }
    }
    
  • 相关阅读:
    MIT python 第二课第四十分钟 取最小值的例子
    Python IDLE快捷键 汇总
    5、Hibernate的延迟加载
    4、Hibernate三种状态的讲解
    3、Hibernate实现简单的CRUD操作
    1、hibernate的简单配置
    2、hibernate的 save 保存失败的解决方法
    JavaWeb开发中关于分页的实现
    常见的网页布局二
    常见的网页布局一
  • 原文地址:https://www.cnblogs.com/kingge/p/8194024.html
Copyright © 2020-2023  润新知