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 ...
随机推荐
- 北航软院2015级C#期末考试部分考题讲解
洗洗睡了吧,我怎么知道明天的考试题目! 或者 你明年补考可以过来看看:) 晚安.
- 数据库开发基础-★SQl Server 控制数据库的服务+数据库的创建与管理(增删改查)★
控制数据库的服务: 方法一: 1.Windows+R 打开运行 打开cmd 2.输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver 关闭数据 ...
- ubuntu 报错 libcublas.so.8.0
在qt程序中使用yolo时报错: ./conjugateGradientPrecond: error while loading shared libraries: libcublas.so.8.0: ...
- 搭建gogs
https://blog.csdn.net/hwm_life/article/details/82969005 服务器环境 CentOS 7 64位 安装Gogs所需的其它环境 需要安装的依赖有Ngi ...
- 【医学影像】《Dermatologist-level classification of skin cancer with deep neural networks》论文笔记
这是一篇关于皮肤癌分类的文章,核心就是分类器,由斯坦福大学团队发表,居然发到了nature上,让我惊讶又佩服,虽然在方法上没什么大的创新,但是论文本身的工作却意义重大,并且这篇17年见刊的文章,引用量 ...
- JAVA编译结果中有****$1.class的
java编译后的文件名字带有$接数字的就是匿名内部类的编译结果,接名字的就是内部类的编译结果 例如:TestFrame$1.class是匿名内部类的编译结果,TestFrame$MyJob.class ...
- Python yield 的基本概念和用法
之前解析MQTT协议时,需要做一个等分字节流的操作,其中用到了yield关键字,如下: def get_var_length(hstring): m = 1 v = 0 for element in ...
- for、while、do while 3种循环异同点
for (; ; ){ 循环体} while(循环条件){ 循环体} do{ 循环体}while(循环条件); 执行顺序不同: for循环和while循环:先判断条件为true时,然后再执行 do w ...
- Unity QualitySettings.antiAliasing 抗锯齿
QualitySettings.antiAliasing 抗锯齿 Description 描述 Set The AA Filtering option. 设置AA过滤选项. The AntiAliaz ...
- 汉诺塔问题java实现
问题描述 三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上.移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 解题思路 使用递归算法进行处理,实在理不 ...