zoukankan      html  css  js  c++  java
  • 【转】IL编织 借助PostSharp程序集实现AOP

    ref:   C# AOP实现方法拦截器 

    在写程序的时候,很多方法都加了。日志信息。比如打印方法开始,方法结束,错误信息,等等。

    由于辅助性功能的代码几乎是完全相同的,这样就会令同样的代码在各个函数中出现,引入了大量冗余代码。

    最后找到了AOP解决方案,分享出来。供大家参考。

    实现步骤

    一、下载安装

    PostSharp-1.5.6.629-Release-x86.msi 或者 PostSharp-1.5.7.1081-Release-x64.msi 具体根据自己电脑来。

    安装的时候记得先退出自己的 Microsoft Visual Studio
    下载地址: http://www.postsharp.net/downloads/postsharp-1.5/sp-1


    二、在项目中添加引用


    三、实例

      [Serializable] //必须加入这个
      [AttributeUsage(AttributeTargets.Method,AllowMultiple=true,Inherited=true)] //设置类的访问访问
      public sealed class LoggingAttribute:OnMethodBoundaryAspect
      {
    
        public string BusinessName { get; set; }
    
    
        /// <summary>
        /// 方法进入时执行
        /// </summary>
        /// <param name="eventArgs"></param>
        public override void OnEntry(MethodExecutionEventArgs eventArgs)
        {
    
          Console.WriteLine("---------------方法:" + eventArgs.Method.Name+"开始--------------");
        }
    
        /// <summary>
        /// 方法退出时执行
        /// </summary>
        /// <param name="eventArgs"></param>
        public override void OnExit(MethodExecutionEventArgs eventArgs)
        {
          Console.WriteLine("---------------方法:" + eventArgs.Method.Name + "结束--------------");
        }
    
    
        /// <summary>
        /// 错误的时候执行
        /// </summary>
        /// <param name="eventArgs"></param>
        public override void OnException(MethodExecutionEventArgs eventArgs)
        {
          base.OnException(eventArgs);
        }
    
        //还有别的方法自己研究
    
      }

    注意点:类必须序列化 需要加 [Serializable]    类要配置 Attribute  设置的他的调用方式

    四 调用 

    在需要调用的 方法前面加入方法的 Attribute 就行了

        /// <summary>
        /// 调用事例1
        /// </summary>
        [Logging()]
        void debugInfo() {
    
          for (int i = 0; i < 3;i++ )
          {
             
            Console.WriteLine("i="+i);
          }
        }
    
    
        /// <summary>
        /// 调用事例2 ,可以给属性赋值
        /// </summary>
        [Logging(BusinessName="aaa")]
        void debugError() {
          for (int i = 0; i < 3; i++)
          {
    
            Console.WriteLine("i=" + i);
          }
        
        }

    五、测试结果

  • 相关阅读:
    15,scrapy中selenium的应用
    14,UA池和代理池
    13,scrapy框架的日志等级和请求传参
    12,scrapy框架之post请求
    11,scrapy框架持久化存储
    10,Scrapy简单入门及实例讲解
    09.移动端数据爬取
    08.Python网络爬虫之图片懒加载技术、selenium和PhantomJS
    07.验证码处理
    vue的ref与$refs
  • 原文地址:https://www.cnblogs.com/leenice/p/5212134.html
Copyright © 2011-2022 走看看