aop postsharp的使用:在方法进入/成功/失败/退出时获取方法名和参数值
1.nuget安装postsharp
2.编写attribute标记
[Serializable]
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class CustomerExceptionLogAttribute : OnMethodBoundaryAspect
{
private ILog logger; public CustomerExceptionLogAttribute()
{
logger = new TXTLogger();
} public override void OnException(MethodExecutionArgs args)
{
base.OnException(args);
System.Windows.Forms.MessageBox.Show("OnException:" + args.Method.Name);
//logger.Log(string.Format("{0}:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), args.Exception.Message));
} public override void OnEntry(MethodExecutionArgs args)
{
var method = args.Method;
var ps=method.GetParameters();
var pv = args.Arguments;
string p = "";
int index = ;
ps.ToList().ForEach(ee=> {
var val = pv[index]; //参数值
p+=ee.Name +":"+val+ ":" + ee.ParameterType + "\r\n";
index++;
}); base.OnEntry(args);
System.Windows.Forms.MessageBox.Show("OnEntry:"+args.Method.Name+"|"+p);
} public override void OnExit(MethodExecutionArgs args)
{
base.OnExit(args);
System.Windows.Forms.MessageBox.Show("OnExit:" + args.Method.Name);
} public override void OnSuccess(MethodExecutionArgs args)
{
base.OnSuccess(args);
System.Windows.Forms.MessageBox.Show("OnSuccess:" + args.Method.Name);
} }
3.使用
[CustomerExceptionLog] //给方法打上标记
public decimal GetPercent(int a, int b)
{
return decimal.Parse(a + "") / decimal.Parse(b + "");
} private void button1_Click(object sender, EventArgs e)
{
GetPercent(, );
} private void button2_Click(object sender, EventArgs e)
{
var percent = GetPercent(, );
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
参考:http://www.cnblogs.com/xingluzhe/p/4738150.html
问题1:如果想对类的所有方法定义统一的异常日志记录的特性,怎么办呢?
如果把特性Targets定义为All或class,可以捕获该类的所有的方法的异常
问题2:如果想对程序集(dll)中每个方法定义异常日志记录的特性,怎么呢?
把特性的Targets定义为all或Assembly,然后在AssemblyInfo.cs文件中,新增程序集的特性
From:http://www.cnblogs.com/xuejianxiyang/p/7065797.html
aop postsharp的使用:在方法进入/成功/失败/退出时获取方法名和参数值的更多相关文章
- AOP - PostSharp 2.0
PostSharp是一个非常优秀的AOP框架,使用上非常方便,功能强大,对目标拦截的方法不需要做什么修改,但现在已经商业化运作从PostSharp官方网站下载一个试用版,安装 简单示例PostShar ...
- 使用SDWebImage下载图片,sharedDownloader方法下载成功,new 方法下载失败
一,经历 1.使用 new 方法创建下载对象时,下载图片总是失败,而且不会执行成功或失败后的回调. 2.参考别人的代码,用的是sharedDownloader来创建下载对象,可以顺利下载图片. 3.看 ...
- Spring AOP:面向切面编程,AspectJ,是基于注解的方法
面向切面编程的术语: 切面(Aspect): 横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象 通知(Advice): 切面必须要完成的工作 目标(Target): 被通知的对象 代理(Pr ...
- spring aop pointcut 切入点是类的公共方法(私有方法不行),还是接口的方法
spring aop pointcut 切入点是类的公共方法(私有方法不行),还是接口的方法 类的公共方法可以,但是私有方法不行 测试一下接口的方法是否能够捕捉到
- Github与Eclipse连接(方法2成功:Pleiades)
2018-3-7 第1次尝试 主要参考这位大神的笔记:http://blog.csdn.net/zhangdaiscott/article/details/16939165 方法非常简单,从官网htt ...
- STM32 USB转串口驱动安装不成功出现黄色感叹号解决方法!
相信很多人在做USB转串口时出现过串口驱动安装不成功,出现黄色感叹号问题, 出现这种问题一般是驱动安装不成功造成的. 这里我就这个问题总结几个简单的方法. 方法1: 插上USB,利用驱动人生安装驱动. ...
- ajax方法请求成功后,没有执行success的方法
$.ajax( { type: "POST", url: "AddSupplier.aspx", dataType:"text", data ...
- AOP获取方法注解实现动态切换数据源
AOP获取方法注解实现动态切换数据源(以下方式尚未经过测试,仅提供思路) ------ 自定义一个用于切换数据源的注解: package com.xxx.annotation; import org. ...
- vue在钩子中引用方法不成功
在组建创建成功后调用methods里的方法fn1,失败,提示not a function: created(){ getData(){} } solution: created(){ this.get ...
随机推荐
- 百度地图 Infowidow 内容(content 下标签) 点击事件
需要监听 infowindow 的打开事件 ,查看InfoWindow API 实现 html 点击效果 代码 var infoWindow = that.createDangerInfoWindo ...
- 洛谷P5156 [USACO18DEC]Sort It Out
这题就是让你求字典序第k小的最短乱序子序列 转换一下,其实就是字典序第k大的最长上升子序列 就统计一下以i结尾的最长上升子序列\(f[i]\),长度为i的上升子序列的开头组成的集合\(v[i]\),转 ...
- mfix中更改time dependent VTK filename的最大时间步数的容量
默认是0000四位,有可能保存文件多了以后不够用,可以在源码中修改,修改以后效果: 源码位置: 把 I4. 改成 I5.
- Angular--TypeScript finalize 方法
self._entityService .getAll() .pipe( finalize(() => { if (self.sheet && self.sheet.length ...
- C#集合之位数组
如果需要处理的数字有许多位,就可以使用BitArray类和BitVector32结构.BitArray类位于System.Collection,BitVector32结构位于System.Collec ...
- 求最大公因数(辗转相除法&更相减损术)
求最大公因数(辗转相除法&更相减损术) 辗转相除法 又名欧几里得算法 ,其原理其实是基于这个定理:\(gcd(a,b)=gcd(b,a\%b)\),详细证明,而任何数与0的最大公约数是它本身 ...
- Linux lamp环境验证码无法显示
2018-12-19 php验证码无法在前端显示 原因: 缺少gd库 解决办法: CentOS / RedHat / Fedora系统 sudo yum install php-gd -y Debia ...
- jQuery 学习笔记(jQuery: The Return Flight)
第一课. ajax:$.ajax(url[, settings]) 练习代码: $(document).ready(function() { $("#tour").on(" ...
- MySQL查询操作select
查找记录 SELECT select_expr [,select_expr ...] [ FROM table_references(表的参照) [WHERE where_condition](条件) ...
- iOS 系统架构及常用框架(iOS的系统架构分为四个层次)
1.iOS基于UNIX系统,因此从系统的稳定性上来说它要比其他操作系统的产品好很多 2.iOS的系统架构分为四层,由上到下一次为:可触摸层(Cocoa Touch layer).媒体层(Media l ...