zoukankan      html  css  js  c++  java
  • 开源一个组件, Clover.Proxy, 请大家指正

    Clover.Proxy是一个基于.net 4.0的类库,

    项目地址:https://github.com/xwj90/Clover.Proxy  (MIT,随便使用)

    它提供一种简单的方式代理执行现有类库里面的方法和属性,它可以用于以下情况:
     

    1. 对现有类的方法和属性,增加BeforeCall 和AfterCall 

    • 通过赋值delegate的方式很方便的自定义BeforeCall 和AfterCall
    • 在BeforeCall 和AfterCall中可以执行记录日志,分析参数,修改参数,记录每个方法的调用次数等. (可以通过配置的方式,打开或者关闭功能,如此就能较为方便的调试了)
    • 通过配置的方式,很方便的控制影响范围
    • 通过修改自动生成的代码,可以做的更多,例如对某些方法自动加LOG, 在执行过程中修改变量等

    2. Proxy支持将现有方法迁移到不同的AppDomain中执行 (主要功能完成)

    • 可以控制独立AppDomain的性能和资源消耗
    • 跨AppDomain操作有很强的独立性,可以扩展为自动更新和重启 (插件形式,需要开发)
    • 由于每个AppDomain支持自己的Configuration File,所以通过给不同的类和assembly配置不同的配置文件,我们可以修改很多现有类库的行为
      • 例如现有项目使用日志系统,不过整个项目的日志都要写到一个文件里面,通过不同的配置文件,我们可以让不同的类或者不同的程序集写入不同的日志文件
    • 跨域会有性能损失

    3.该项目更像是一个研究性质的项目,其中涉及到了以下的技术: (如果你有兴趣,看看源码)

    • 动态生成cs文件和编译成Assembly
    • 分析Type相关信息
    • 类继承的相关知识
    • 动态创建AppDomain和加载Assembly
    • 跨域操作的相关内容

    以下是一个Sample:

                ProxyService service = new ProxyService();
    service.BeforeCall = (p) =>
    {
    Console.WriteLine("Before Call : " + p.Arguments);
    };
    service.AfterCall = (p) =>
    {
    Console.WriteLine("After Call : " + p.ReturnValue);
    };

    var item = service.Create<TestWrapper>();

    // method
    var r1 = item.GetAll(128, "Test String");
    Console.WriteLine();

    // property 可以通过配置设置某个方法,或者某类方法需要调用BeforeCall & AfterCall
    var r2 = item.Name;
    Console.WriteLine();



    var item2 = service.Create<TestWrapper2>();
    var r3 = item2.Test("test string"); //run method in remote domain //未完全完成


    感谢 shiweichuan 和 weikaishio

  • 相关阅读:
    解决Mac笔记本电脑自带录屏软件没有声音问题
    pip安装包后Import的时候提示找不到的解决方案
    Photoshop怎么给图片添加简介信息或者版权信息
    [2021/08/06]Ubuntu20 安装指定小版本Mysql(本文示例mysql8.0.18)
    Springboot2.3.5 实现JWT授权验证并针对不同用户实现多个拦截器
    搭建集群步骤注意事项
    docker服务程序网络排查
    网络分层协议集合分析
    括号串
    抢救实验数据
  • 原文地址:https://www.cnblogs.com/PurpleTide/p/2263597.html
Copyright © 2011-2022 走看看