【转】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的可以点击该连接注 ...
随机推荐
- java中的链式编程
听到链式编程听陌生的,但是写出来就感觉其实很熟悉 package test; public class Test { String name; String phone; String mail; S ...
- C#操作串口总结
Technorati 标签: C#,SerialPort,ReadTo,ReadTimeout 最近几天一直在调一个要长时间连续不断的操作串口,并且是多线程运行,不允许中断的服务.后来服 ...
- mysql索引补充
索引补充 1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中. 2.索引种类 普通索引:仅加速查询 唯一索引:加速查询 + 列 ...
- iOS- 自定义UIView (测试block和代理)
#import <UIKit/UIKit.h> typedef void(^compeletionHandler) (NSInteger selectButtonIndex); @clas ...
- 源自梦想 自定义ViewGroup的整理_1
今天说说自定义控件,稍微偏底层一点的东西.今天的主要任务是自己完全写代码,写一个ViewGroup,实现一个类似ViewPager这样的一个功能. 大家自定义View肯定写过,不过估计写的也不多.等大 ...
- CGFloat、CGPoint、CGSize和CGRect
CGFloat:是表示浮点数类型. CGPoint:表示二维坐标的点.通过x和y坐标定义.点表示位置值. CGSIZE:表示矩形的宽度和高度.通过宽度和高度来定义. CGRect: 表示矩形的位置和大 ...
- Swift中if let name = optionName {}解释
在Swift语法的if语句中,是不能出现这种情况的: let optionName = "Swift" if let name = optionName { print(" ...
- Jax-ws开发实例
初次接触Jax-ws(Java API xml web Service)感觉挺简单的,在这里写下我的所学的: 大概的顺序是:首先定义接口 ,然后写接口的实现类,最后编写客户端.步骤是挺简单的,来看看代 ...
- HTML超出文本显示省略号...[text-overflow]
需要对div或者span同时应用Css: text-overflow:ellipsis; white-space:nowrap; overflow:hidden; 即可实现所想要得到的溢出文本显示省略 ...
- .NET下实现分布式缓存系统Memcached (转自网络)
Memcached在.NET中的应用 一.Memcached服务器端的安装(此处将其作为系统服务安装) 下载文件:memcached 1.2.1 for Win32 binaries (Dec 23, ...