美文网首页
开源.Net动态代理框架:Machete.Proxy

开源.Net动态代理框架:Machete.Proxy

作者: 有点胖的小乐乐 | 来源:发表于2017-10-15 23:59 被阅读12次

1.介绍

动态代理是个非常有用的东西,比如用动态代理加上反射可以做AOP拦截。Java中的动态代理很容易实现,有两种方式JDK代理和Cglib。但是.Net实现动态代理其实有点费劲的,大致也可以分为两种,第一种RealProxy ,有个例子(https://github.com/jinshuai/DynamicProxy.NET)。第二种采用Emit来实现,Machete.Proxy就是使用Emit来实现的。关于Emit不是本文的重点,以后做介绍。下面介绍Machete.Proxy使用。

2.一个接口和实现类

public interface IUserDao
    {
        int Delete(int id);

        string Get(string name);

        void Show(string name);

        int Update(string name, int id);
    }

 public class UserDao : IUserDao
    {
        public int Delete(int id)
        {
            return id;
        }

        public string Get(string name)
        {
            return "name :" + name;
        }

        public void Show(string name)
        {
            Console.WriteLine("name :" + name);
        }

        public int Update(string name, int id)
        {
            throw new Exception("update exception");
        }
    }

3.创建拦截类

public class UserIntercept : IIntercept
    {
        /// <summary>
        /// 方法执行之前
        /// </summary>
        /// <param name="method"></param>
        /// <param name="parameters"></param>
        public void BeginInvoke(string method, params object[] parameters)
        {
            Console.WriteLine("BeginInvoke method:" + method);
        }

        /// <summary>
        /// 方法执行之后
        /// </summary>
        /// <param name="retVal"></param>
        public void EndInvoke(object retVal)
        {
            if (retVal != null)
            {
                Console.WriteLine("EndInvoke  return value:" + retVal);
            }
            else
            {
                Console.WriteLine("EndInvoke  no return value");
            }
        }

        /// <summary>
        /// 执行方法出异常
        /// </summary>
        /// <param name="exception"></param>
        public void OnException(Exception exception)
        {
            Console.WriteLine("OnException " + exception.Message);
        }
    }

4.生成代理类 比执行方法

       IIntercept intercept = new UserIntercept();
            var proxyObject = new UserDao();
            var factory = new AutoProxyFatory<IUserDao>();
            IUserDao userDao = factory.Build(proxyObject, intercept);
             
            string ret1 = userDao.Get("张三");
            Console.WriteLine("------------------------------------------------------------");
            int ret2 = userDao.Delete(1);
            Console.WriteLine("------------------------------------------------------------");
            userDao.Show("张三");
            Console.WriteLine("------------------------------------------------------------");
            userDao.Update("张三", 2);

5.执行结果

执行结果

6.总结

本文介绍了Machete.Proxy简单使用,Machete.Proxy还需要不断地完善。
Machete.Proxy开源地址:https://github.com/MacheteTeam/Machete.Proxy

相关文章

  • 开源.Net动态代理框架:Machete.Proxy

    1.介绍 动态代理是个非常有用的东西,比如用动态代理加上反射可以做AOP拦截。Java中的动态代理很容易实现,有两...

  • Java高级主题(五)——动态代理

    代理可以分为静态代理、动态代理,动态代理又可以分为 jvm的动态代理 和 cglib的动态代理。像spring框架...

  • .NET 下基于动态代理的 AOP 框架实现揭秘

    .NET 下基于动态代理的 AOP 框架实现揭秘 Intro 之前基于 Roslyn 实现了一个简单的条件解析引擎...

  • 手写一个动态代理框架

    手写一个动态代理框架 一:代理认知 1、在JAVA里什么是动态代理? 个人理解:这里的动态代理首先要明确代理的对象...

  • 公共知识复习

    动态代理 公共技术点之 Java 动态代理 @codeKK 开源站 屏幕适配 android机型适配终极篇 - C...

  • java动态代理

    原文地址:java动态代理 代理 最近在学习 Spring 框架,AOP涉及到动态代理的知识,故整理一下,了解动态...

  • 代理模式,静态代理和动态代理

    Java代理模式:静态代理和动态代理[https://blog.csdn.net/qq_29152241/arti...

  • 设计模式之动态代理

    动态代理模式,在当前流行框架(如:Spring、Mybatis、Dubbo)中应用非常广泛,掌握动态代理模式是理...

  • 2018-03-21

    与AspectJ的静态代理不同,Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码...

  • Spring框架之动态代理

    前言 动态代理是一种常用的设计模式,广泛应用于框架中,Spring框架的AOP特性就是应用动态代理实现的,想要理解...

网友评论

      本文标题:开源.Net动态代理框架:Machete.Proxy

      本文链接:https://www.haomeiwen.com/subject/ggocuxtx.html