【转】IL编织 借助PostSharp程序集实现AOP
ref: C# AOP实现方法拦截器
在写程序的时候,很多方法都加了。日志信息。比如打印方法开始,方法结束,错误信息,等等。
由于辅助性功能的代码几乎是完全相同的,这样就会令同样的代码在各个函数中出现,引入了大量冗余代码。
最后找到了AOP解决方案,分享出来。供大家参考。
实现步骤
一、下载安装
PostSharp-1.5.6.629-Release-x86.msi 或者 PostSharp-1.5.7.1081-Release-x64.msi 具体根据自己电脑来。
安装的时候记得先退出自己的 Microsoft Visual Studio
下载地址: http://www.postsharp.net/downloads/postsharp-1.5/sp-1
二、在项目中添加引用

三、实例
[Serializable] //必须加入这个
[AttributeUsage(AttributeTargets.Method,AllowMultiple=true,Inherited=true)] //设置类的访问访问
public sealed class LoggingAttribute:OnMethodBoundaryAspect
{ public string BusinessName { get; set; } /// <summary>
/// 方法进入时执行
/// </summary>
/// <param name="eventArgs"></param>
public override void OnEntry(MethodExecutionEventArgs eventArgs)
{ Console.WriteLine("---------------方法:" + eventArgs.Method.Name+"开始--------------");
} /// <summary>
/// 方法退出时执行
/// </summary>
/// <param name="eventArgs"></param>
public override void OnExit(MethodExecutionEventArgs eventArgs)
{
Console.WriteLine("---------------方法:" + eventArgs.Method.Name + "结束--------------");
} /// <summary>
/// 错误的时候执行
/// </summary>
/// <param name="eventArgs"></param>
public override void OnException(MethodExecutionEventArgs eventArgs)
{
base.OnException(eventArgs);
} //还有别的方法自己研究 }
注意点:类必须序列化 需要加 [Serializable] 类要配置 Attribute 设置的他的调用方式
四 调用
在需要调用的 方法前面加入方法的 Attribute 就行了
/// <summary>
/// 调用事例1
/// </summary>
[Logging()]
void debugInfo() { for (int i = ; i < ;i++ )
{ Console.WriteLine("i="+i);
}
} /// <summary>
/// 调用事例2 ,可以给属性赋值
/// </summary>
[Logging(BusinessName="aaa")]
void debugError() {
for (int i = ; i < ; i++)
{ Console.WriteLine("i=" + i);
} }
五、测试结果

【转】IL编织 借助PostSharp程序集实现AOP的更多相关文章
- 在.NET项目中使用PostSharp,实现AOP面向切面编程处理
PostSharp是一种Aspect Oriented Programming 面向切面(或面向方面)的组件框架,适用在.NET开发中,本篇主要介绍Postsharp在.NET开发中的相关知识,以及一 ...
- C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序
本篇主要体验:编写C#,IL代码,用"VS2012开发人员命令提示"编译成程序集,并运行程序. □ C#文件编译为程序集 →在F盘创建as文件夹→在as文件夹下创建MyClass. ...
- MEF核心笔记(6)让 MEF 拥抱 AOP
场景: 最近推荐同事在项目中使用起了 MEF,用其构建一个插件式的多人开发框架,因为该框架不是让我去设计了,所以对于 MEF 和 IOC 等概念不是很了解的同事,便会出现各种问题.接入 AOP 便是其 ...
- AOP in .NET
AOP in .NET AOP是所有现代OOP语言开发框架中的基础功能,随着Spring框架的普及,对于AOP的使用已经像喝水一样普通.可是知其然还要其所以然.本文将基于.NET环境探讨实现AOP的底 ...
- C#进阶系列——AOP?AOP!
前言:今天大阅兵,可是苦逼的博主还得坐在电脑前写博客,为了弄清楚AOP,博主也是拼了.这篇打算写写AOP,说起AOP,其实博主接触这个概念也才几个月,了解后才知道,原来之前自己写的好多代码原理就是基于 ...
- 【转】AOP知识点
ref:http://www.diybloghome.com/prology/975.html 一.概念理解 老规矩,还是先看官方解释:AOP(Aspect-Oriented Programming, ...
- C#进阶之AOP
一.AOP概念(转自) AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技 ...
- C#进阶系列——AOP
一.AOP概念(转自) 老规矩,还是先看官方解释:AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程 ...
- .Net中的AOP读书笔记系列之AOP介绍
返回<.Net中的AOP>系列学习总目录 本篇目录 AOP是什么? Hello,World! 小结 本系列的源码本人已托管于Coding上:点击查看,想要注册Coding的可以点击该连接注 ...
随机推荐
- JavaScript随机数
function random(start,end){ var total=start+end; return Manth.floor(Manth.random()+total-start); }
- OC 实现的几个排序算法
和在VC++6.0里相比 在OC里面实现 不算困难 可是我用惯了C/C++呢 快速排序,冒泡排序,直接插入排序和折半插入排序,希尔排序,堆排序,直接选择排序 /******************** ...
- DataGridView显示行号的几种方法来自http://www.soaspx.com/dotnet/csharp/csharp_20100204_2740.html
方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号: private void dataGridView1_RowPostPai ...
- 安卓弹出对话框——Alertdialog
在Android开发当中,在界面上弹出一个Dialog对话框使我们经常需要做的,本篇随笔将详细的讲解Dialog对话框这个概念,包括定义不同样式的对话框. 一.Dialog 我们首先来看看androi ...
- Django升级1.6之后出现“Bad Request (400)”错误的解决方案
Django从1.4升级到1.6之后发现之前的网站都无法访问了,会出现“Bad Request (400)”的错误,搜了半天终于找到了解决办法. 解决方法很简单: 在settings.py里面添加: ...
- Oracle 基础 <2> --函数
一:函数的定义 函数是用于返回特定数据的PL/SQL程序块 (函数必须返回一个值) 语法: create [or replace] function function_name--函数名称 [(par ...
- Umbraco(4)-Outputting the Document Type Properties(翻译文档)
翻译原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/umbraco4outputting-the-document-typ ...
- CF Soldier and Badges (贪心)
Soldier and Badges time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- 用Shell实现俄罗斯方块代码(Tetris.sh)
本代码来源于网络: 文件下载地址:http://files.cnblogs.com/files/DreamDrive/Tetris.sh #!/bin/bash # Tetris Game # 10. ...
- 实现多个UIView之间切换的动画效果
@interface RootViewController (){ UIView *view1; UIView *view2; int flag; } @end @implementation Roo ...