当前位置: 首页 > news >正文

Castle.core AOP

使用

 1  //代理生成器
 2  ProxyGenerator generator = new ProxyGenerator();
 3  //拦截器
 4  MyInterceptor interceptor = new MyInterceptor();
 5  //代理生成器使用拦截器生成代理对象
 6  IDBHelper dbhelper = generator.CreateClassProxy<MySqlDBHelper>(interceptor);
 7  Console.WriteLine("生成的类型时:{0}", dbhelper.GetType());
 8  int[] c = new int[3];
 9  c[0] = 1;
10  c[1] = 2;
11  c[2] = 3;
12  int c1 = 2;
13  dbhelper.show(2,3,c,ref c1);
14  dbhelper.show1();

其他

  1  public interface IDBHelper
  2  {
  3      void show(int a,int b, int[] c, ref int c1);
  4      void show1();
  5  }
  6  public class MySqlDBHelper : IDBHelper
  7  {
  8      public virtual void show(int a, int b, int[] c,ref int c1)
  9      {
 10          Console.WriteLine("I am Mysql");
 11      }
 12      public virtual void show1()
 13      {
 14          Console.WriteLine("I am Mysql1");
 15      }
 16  }
 17 
 18   
 19  public class MyInterceptor : StandardInterceptor
 20  {
 21      /// <summary>
 22      /// 调用前拦截
 23      /// </summary>
 24      /// <param name="invocation"></param>
 25      protected override void PreProceed(IInvocation invocation)
 26      {
 27 
 28          var parameters = invocation.Method.GetParameters();
 29 
 30          for (int i = 0; i < parameters.Length; i++)
 31          {
 32              var paramInfo = parameters[i];
 33              object argValue = invocation.Arguments[i];
 34 
 35              // 对参数值进行友好字符串转换,特别是处理数组
 36              string stringValue = ConvertArgumentToString(argValue);
 37              Console.WriteLine($"  参数 [{i}]: 名称={paramInfo.Name}, 类型={paramInfo.ParameterType.Name}, 值={stringValue}");
 38          }
 39          Console.WriteLine("调用前拦截,调用方法:" + invocation.Method.Name+$"参数:{ string.Join(", ", invocation.Arguments)} ");
 40 
 41 
 42          base.PerformProceed(invocation);
 43      }
 44      /// <summary>
 45      /// 将参数值转换为友好的字符串表示,特别处理数组类型。
 46      /// </summary>
 47      private string ConvertArgumentToString(object argument)
 48      {
 49          if (argument == null) return "null";
 50 
 51          Type argType = argument.GetType();
 52 
 53          // 处理数组(如 double[])
 54          if (argType.IsArray)
 55          {
 56              //try
 57              //{
 58              //    return JsonSerializer.Serialize(argument);
 59              //}
 60              //catch
 61              {
 62                  return $"[{string.Join(", ", (argument as System.Array).Cast<object>())}]";
 63              }
 64          }
 65          return argument.ToString();
 66 
 67          //// 处理简单类型
 68          //if (argType.IsPrimitive || argType == typeof(string))
 69          //{
 70          //    return argument.ToString();
 71          //}
 72 
 73          //// 对于其他复杂对象,使用序列化
 74          //try
 75          //{
 76          //    return JsonSerializer.Serialize(argument, new JsonSerializerOptions { WriteIndented = false });
 77          //}
 78          //catch
 79          //{
 80          //    return argument.ToString();
 81          //}
 82      }
 83      /// <summary>
 84      /// 拦截的方法返回时调用
 85      /// </summary>
 86      /// <param name="invocation"></param>
 87      protected override void PerformProceed(IInvocation invocation)
 88      {
 89          Console.WriteLine("调用方法返回时拦截,调用方法:" + invocation.Method.Name);
 90          base.PostProceed(invocation);
 91      }
 92      /// <summary>
 93      /// 调用后拦截
 94      /// </summary>
 95      /// <param name="invocation"></param>
 96      protected override void PostProceed(IInvocation invocation)
 97      {
 98          Console.WriteLine("调用后拦截,调用方法:" + invocation.Method.Name);
 99          base.PreProceed(invocation);
100      }

 

http://www.jsqmd.com/news/54083/

相关文章:

  • 2025 年 11 月中小企业管理咨询公司权威推荐榜:战略优化、组织赋能与业绩增长实战专家深度解析
  • win11右键显示更多选项开启
  • 05.再修改一次网站练习Git使用流程
  • 视频汇聚平台EasyCVR服务重启后播放异常问题排查实录
  • 成都火锅团建2025年口碑榜,吃货们都在推荐这些店,四川火锅/市井火锅/川渝火锅/特色美食成都本地人推荐的火锅
  • 2025年沈阳大连天津石家庄郑州高性价比的自助KTV场所、服
  • 2025年高速扫码模块直销厂家权威推荐榜单:远距离模块/扫描模组/条码扫码模组源头厂家精选
  • 2025 年气相防锈膜厂家最新推荐榜,技术实力与市场口碑深度解析防锈热收缩膜/防锈抗静电膜/防锈纸/防锈干燥剂/防锈母粒/防锈粉末/防锈盒/防锈管/防锈液公司推荐
  • 习题解析之:完美立方数
  • 水蛭素品牌哪家好?2025颈动脉斑块防治产品深度测评:KOUND血畅宁筑牢血管防线
  • 2025年防辐射铅玻璃实力厂家权威推荐榜单:医用铅玻璃 /铅玻璃‌/防护铅玻璃‌源头厂家精选
  • 2025年1400度高温马弗炉生产厂家权威推荐榜单:不锈钢马弗炉/电阻马弗炉‌/工业高温马弗炉‌源头厂家精选
  • NTP时间同步服务器:安徽京准赋能智慧城市系统
  • 打包教程
  • 04.总结学到的Git命令
  • iBeacon技术解密:BLE驱动的室内定位与近场交互!
  • 2025 年 11 月精益管理咨询公司权威推荐榜:专业辅导与实效落地口碑之选,助力企业运营升级与降本增效
  • pandas 处理带有 合并的单元格
  • 代码跑通算复现成功吗
  • 2025年工业无氧烘箱设备厂家TOP5推荐:HMDS 无氧烘箱、真空无氧烘箱、充氮无氧烘箱、高温无氧烘箱、HMDS 真空无氧烘箱、从精密制造到行业适配的务实之选
  • 大模型实验室Lab4AI QA 第一期:Flash Attention 安装 OOM、文件上传失败?解决方法在这
  • 2025 年酚醛复合风管厂家推荐:廊坊康杰通风材料有限公司专业解决方案与工程实践优势解析酚醛复合风管连接铝合金法兰/酚醛复合风管连接铝合金断桥法兰/酚醛复合风管夹心板材厂家推荐
  • NeurlPS2025!香港大学等联合推出Concerto框架 突破单模态局限,为三维场景理解注入新范式
  • 03.修改网站并再次使用Git
  • 2025厦门的留学机构有哪些地方好
  • 2025青岛十大正规留学机构
  • 2025留学中介哪家强都有哪些特色
  • 2025广州知名留学中介机构有哪些
  • 2025北京靠谱的留学中介机构
  • XLog debug 开启打印日志,release 关闭打印日志