AOP之PostSharp2-OnMethodBoundaryAspect
在上一篇中我们了解了简单的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 / ));
sw = null;
}
}
}
}
}
测试方法:
[OnMethodBoundaryAspectDemoAttribute(Enabled=true)]
public static void OnMethodBoundaryAspectDemoAttributeTest()
{
System.Threading.Thread.Sleep();
}
结果如下:
注:这里我们也可以用到我们上节说的 多播(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
==================================原文链接===此文章由博客转发小工具转发==================================
AOP之PostSharp2-OnMethodBoundaryAspect的更多相关文章
- .Net中的AOP系列之构建一个汽车租赁应用
返回<.Net中的AOP>系列学习总目录 本篇目录 开始一个新项目 没有AOP的生活 变更的代价 使用AOP重构 本系列的源码本人已托管于Coding上:点击查看. 本系列的实验环境:VS ...
- .Net中的AOP读书笔记系列之AOP介绍
返回<.Net中的AOP>系列学习总目录 本篇目录 AOP是什么? Hello,World! 小结 本系列的源码本人已托管于Coding上:点击查看,想要注册Coding的可以点击该连接注 ...
- .Net中的AOP系列之《单元测试切面》
返回<.Net中的AOP>系列学习总目录 本篇目录 使用NUnit编写测试 编写和运行NUnit测试 切面的测试策略 Castle DynamicProxy测试 测试一个拦截器 注入依赖 ...
- .Net中的AOP系列之《方法执行前后——边界切面》
返回<.Net中的AOP>系列学习总目录 本篇目录 边界切面 PostSharp方法边界 方法边界 VS 方法拦截 ASP.NET HttpModule边界 真实案例--检查是否为移动端用 ...
- 游戏编程系列[1]--游戏编程中RPC协议的使用[2]--Aop PostSharp篇
上一篇我们使用了一个通用JSON协议约定来进行达到远程调用的目的.但是从实现上,我们需要不断的在所有的方法上添加拦截,并且判断拦截,然后执行,这就达到了一个比较繁琐的目的. 之前我们尝试过使用代码生成 ...
- C#进阶系列——AOP?AOP!
前言:今天大阅兵,可是苦逼的博主还得坐在电脑前写博客,为了弄清楚AOP,博主也是拼了.这篇打算写写AOP,说起AOP,其实博主接触这个概念也才几个月,了解后才知道,原来之前自己写的好多代码原理就是基于 ...
- C# AOP框架入门
AOP面向切面编程(Aspect Oriented Programming),是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.Spring框架用的核心技术就是AOP,是函数式编程的一 ...
- PostSharp AOP
使用PostSharp 在.NET 平台上实现 AOP 摘要 本文首先介绍AOP(面向方面编程)的相关概念及理论,然后介绍如何使用PostSharp框架在.NET平台上实现AOP,最后对PostS ...
- 【转】IL编织 借助PostSharp程序集实现AOP
ref: C# AOP实现方法拦截器 在写程序的时候,很多方法都加了.日志信息.比如打印方法开始,方法结束,错误信息,等等. 由于辅助性功能的代码几乎是完全相同的,这样就会令同样的代码在各个函数中 ...
随机推荐
- Codefores 507C Guess Your Way Out!(递归)
C. Guess Your Way Out! time limit per test 1 second memory limit per test 256 megabytes input standa ...
- 记录一次kibana启动Unable to fetch data from reporting collector
版本不匹配导致 应该es与kibana版本一致 本文链接:https://blog.csdn.net/qq_33293753/article/details/87894882
- 用C实现基本的输出参数个数与参数内容
开发环境为 centos7 和 gcc4.8.5,代码如下: /** * 用C实现基本的输出参数个数与参数内容 */ #include <stdio.h> int main(int arg ...
- Javascript基础五(BOM和DOM)
1.BOM概念 什么是BOM? BOM是Browser Object Model的缩写,简称浏览器对象模型.这个对象就是window BOM提供了独立于内容而与浏览器窗 ...
- 自动化运维工具ansible简单介绍
ansible架构图 ansible安装(centos7环境下) yum update yum install ansible 验证ansible是否成功安装 ansible --version an ...
- java 方法的定义与调用
/* 定义一个方法的格式: public static void 方法名称(){ 方法体 } 方法名称的命名规则和变量一样,使用小驼峰 方法体:也就是大括号里面的可以包含任何语句 注意事项: 1.方法 ...
- 执行cython文件
找到目录下的setup.py文件 cd到工程目录下: 执行 python3 setup.py build_ext --inplace
- Anaconda 安装 pytorch报错解决方法
一.安装Pytorch: # -c 指定用pytorch镜像源下载软件conda install pytorch torchvision cpuonly -c pytorch 报错: 二.配置: ch ...
- Java8 使用stream 实现wordcount
案例: public static void main(String[] args) { List<String> items = Arrays.asList("apple&qu ...
- mysql的安裝
记得上学的时候,“研究”过一次mysql,找了篇文章,在课堂上念了.至今已经10余年,居然没再碰过数据库,自以为做嵌入式不用数据库,回头一看,却已经out许久... 上网下到最新的mysql5.5,从 ...