浅谈C# AOP的简单实现

2019-12-30 19:53:09丽君

(1)下载Postsharp安装包,安装。

(2)在需要使用AOP的项目中添加PostSharp.dll这个dll的引用。

(3)定义拦截的方法:


[Serializable]
  public class TestAop : PostSharp.Aspects.OnMethodBoundaryAspect
  {
     //发生异常时进入此方法
    public override void OnException(MethodExecutionArgs args)
    {
      base.OnException(args);
    }

     //执行方法前执行此方法
    public override void OnEntry(MethodExecutionArgs args)
    {
      base.OnEntry(args);
    }

     //执行方法后执行此方法
    public override void OnExit(MethodExecutionArgs args)
    {
      base.OnExit(args);
    }
  }

注意这里的TestAop这个类必须要是可序列化的,所以要加上[Serializable]特性

(4)在需要拦截功能的地方使用。

在类上面加特性拦截,此类下面的所有的方法都会具有拦截功能。


[TestAop]public class Impc_TM_PLANT : Ifc_TM_PLANT
  {
    /// <summary>
    /// 获取或设置服务接口。
    /// </summary>
    private Ic_TM_PLANTService service { get; set; }
    
    public IList<DTO_TM_PLANT> Find()
    {
      DTO_TM_PLANT otest = null;
      otest.NAME_C = "test";//异常,会进入OnException方法
        return service.FindAll(); 
     }
  }

方法上面加特性拦截,只会拦截此方法。


[TestAop]
    public IList<DTO_TM_PLANT> Find()
    {
      DTO_TM_PLANT otest = null;
      otest.NAME_C = "test";
      return service.FindAll();
    }