在上一篇中我们了解了简单的OnExceptionAspectAOP面向方向切入,在第一节中我们将继续我们的PostSharp AOP系列的OnMethodBoundaryAspect方法行为的切入,这也是我们常用的AOP切入。

OnMethodBoundaryAspect顾名思义其为对方法边界的切入,定义如下:

在这里提供了四个方法边界点为我们切入。我们可以很轻松的对方法权限,执行时间,参数合法性等aspect。

aspect传入参数MethodExecutionArgs给我如下信息,同时还包括父类AdviceArgs的Instance属性,实例方法才有值,静态方法则为null,

这里还需要说一下属性FlowBehavior:表示方法执行行为,是一个枚举变量:

二:执行时间统计demo

下面我们实践一个方法执行时间统计demo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PostSharp.Aspects;

namespace PostSharpDemo
{
    [Serializable]
    public class OnMethodBoundaryAspectDemoAttribute : OnMethodBoundaryAspect
    {
        public bool Enabled
        {
            get;
            set;
        }

public override void OnEntry(MethodExecutionArgs args)
        {
            if (this.Enabled)
            {
                args.MethodExecutionTag = System.Diagnostics.Stopwatch.StartNew();
            }
        }
        public override void OnExit(MethodExecutionArgs args)
        {
            if (this.Enabled)
            {
                var sw = args.MethodExecutionTag as System.Diagnostics.Stopwatch;
                if (sw != null)
                {
                    sw.Stop();
                    Console.WriteLine(String.Format("方法{0}执行时间为:{1}s", args.Method.Name, sw.ElapsedMilliseconds / 1000));
                    sw = null;
                }
            }
        }
    }
}

测试方法:

[OnMethodBoundaryAspectDemoAttribute(Enabled=true)] 
       public static void OnMethodBoundaryAspectDemoAttributeTest() 
       { 
           System.Threading.Thread.Sleep(2000); 
       }

结果如下:

注:这里我们也可以用到我们上节说的 多播(Multicasting)加到我们的class,assembly上统计我们所有的方法。

在最后在废话一句,我们可以很轻松的指定我们的方法(比如使我们的wcf服务操作契约)的访问权限,比如基于操作权限的功能点function的处理,如[PowerAttribute(“Add,Edit”)]这样简单处理,我们只需要在OnEnter中aspect,决定方法FlowBehavior行为,剩下的事情教给大家自己实践。

欢迎大家积极指正和多多交流。

附件:demo下载

其他AOP参考:

AOP之PostSharp初见-OnExceptionAspect AOP之PostSharp2-OnMethodBoundaryAspect AOP之PostSharp3-MethodInterceptionAspect AOP之PostSharp4-实现类INotifyPropertyChanged植入 AOP之PostSharp5-LocationInterceptionAspect http://www.cnblogs.com/whitewolf/category/312638.html

本文转自破狼博客园博客,原文链接:http://www.cnblogs.com/whitewolf/archive/2011/12/04/PostSharp2.html,如需转载请自行联系原作者

AOP之PostSharp2-OnMethodBoundaryAspect相关推荐

  1. PostSharp AOP编程:1.基于PostSharp的AOP日志记录和异常捕捉【附带源码】

    AOP(基于切面编程):它是对业务逻辑的分离,使各个业务直接的耦合变低,比如在传统的OOP编程中将日志记录.异常处理.权限管理等方面剥离出来.在今后的维护过程中,对其改变日志记录.异常处理.权限管理方 ...

  2. 由浅入深CIL系列【目录索引】+ PostSharp AOP编程【目录索引】

    CIL简介:CIL(Common Intermediate Language)中文名为通用中间语言,注意它曾经被称为微软中间语言或MSIL,它是一种类似于JAVA字节码的语言.在微软语言平台中,不管程 ...

  3. PostSharp的AOP设计在.NET Remoting中的应用

    在.NET Remoting技术中实现用户的验证和授权并不那么容易,尤其是将其宿主在windows service这样的环境中的时候.大部分时候,我们都需要实现自定义的验证方式.具体来说也不是那么复杂 ...

  4. 使用PostSharp开始AOP

    近段时间有时间看看以前写的代码,系统有一个功能:用户的任意一个修改,删除操作都要进行日志记录,当时进度太赶,也只是知道 aop(关于什么是 aop 请自行google) 能处理这方面的问题,具体的还没 ...

  5. AOP - PostSharp 2.0

    PostSharp是一个非常优秀的AOP框架,使用上非常方便,功能强大,对目标拦截的方法不需要做什么修改,但现在已经商业化运作 从PostSharp官方网站下载一个试用版,安装 简单示例 PostSh ...

  6. 【ABP杂烩】面向切面编程(AOP)知识总结

    目录 1.存在问题 2.AOP的概念 3.AOP应用范围 3.AOP实现方式 4.应用举例 5.结束语 本文在学习[老张的哲学]系列文章AOP相关章节后,自己归纳总结的笔记. 1.存在问题 最近,其它 ...

  7. .Net中的AOP系列之《方法执行前后——边界切面》

    返回<.Net中的AOP>系列学习总目录 本篇目录 边界切面 PostSharp方法边界 方法边界 VS 方法拦截 ASP.NET HttpModule边界 真实案例--检查是否为移动端用 ...

  8. .Net中的AOP系列之《AOP实现类型》

    本系列的实验环境:VS 2017. 读完本章后,可能仍然不能实现自己的AOP工具,但应该对两种主要类型(PostSharp和Castle DynamicProxy)的AOP工具的运行原理有了基本的理解 ...

  9. C#进阶系列——AOP?AOP!

    前言:今天大阅兵,可是苦逼的博主还得坐在电脑前写博客,为了弄清楚AOP,博主也是拼了.这篇打算写写AOP,说起AOP,其实博主接触这个概念也才几个月,了解后才知道,原来之前自己写的好多代码原理就是基于 ...

最新文章

  1. (转)java.lang.OutOfMemoryError: Java heap space错误及处理办法(收集整理、转)
  2. private static final 修饰符
  3. Python代码如何写的更优雅
  4. Java之控制反转和依赖注入
  5. 市场39款主流同步整流DCDC芯片横向测评预告---摘自:嘉立创商城
  6. spring mysql json_SpringBoot+MYSQL 配置支持json数据格式
  7. 不同的编译器:GCC G++ C C++的区别
  8. 工程师的成熟模型_数据工程师的成熟度
  9. 前端学习(3124):react-hello-react之对props进行限制
  10. Android Studio发布项目到jcenter
  11. mysql_num_rows+报错_错误:警告:mysql_num_rows()期望参数1为资源,在第19行的C:\ xampp...
  12. 关于问题PageNotFound.noHandlerFound No mapping found for HTTP的解决
  13. bootstrap 模态窗口按钮位置_Bootstrap模态框(modal)垂直居中
  14. MyBatis Plus 导入IdType失败
  15. jQuery中$.get()、$.post()和$.ajax()
  16. Transformer、BERT等模型学习笔记
  17. NAACL2021 | 苏大阿里提出:一种统一的基于跨度的意见挖掘方法
  18. 编译OpenJDK8:configure: error: Could not find all X11 headers
  19. 双 JK 触发器 74LS112 逻辑功能。真值表_C08. D触发器
  20. 考试用计算机反思800字,期中考试总结反思作文800字

热门文章

  1. Arrays.sort 不区分大小写 排序
  2. Element el-upload上传组件详解
  3. 区别用户使用的终端设备代码 转 https://segmentfault.com/a/1190000012957023
  4. 更改sybase服务名
  5. IOS开发知识(七)
  6. HDLC和 PPP的实验
  7. linux共享文件丢失,【干货分享】linux平台下数据文件被误删后,如何及时得知并进行恢复...
  8. Spring的AOP使用xml配置
  9. jsp中setAttribute与getAttribute方法使用介绍
  10. jsp页面间的传值方法