使用PostSharp开始AOP
近几天接触 PostSharp, 看看别人写的挺简单的,遂决定试一下(先前看过 Castle ,可它的动态代理好像只能在 virtual 方法上,不知道是我理解错了还是..否则就是 要用上 ioc....放弃).
就我所理解的,选用 PostSharp 的好处有:
1.采用 MSIL 静态代码注入,避免使用反射;
2.使用 MSBuild Task,使得开发人员可以像使用编译器内置 Attribute 那样使用 AOP;
3.可以拦截任意方法而不是局限于 virtual 方法;
4.对调用方法有更多的控制方法,比如输入参数,返回结果等
话会正题.开始前先到官网下载一个版本的 PostSharp(www.postsharp.org). 现在已经出了2.0 了,不过是45天的试用期,(过期收费?).装上试一下,它会在 vs2008 上面安插一个插件(这个暂不理会).真正到项目中使用的还是免费的好(我自己怎么为公司掏?),还是下个 1.5 的吧,关闭 vs 后安装.
新建一个 console 项目. 先模拟实现 Log:
{
public static void Write(MethodExecutionEventArgs eventArgs,string message)
{
Console.WriteLine("开始日志记录.方法名: {0} , 实例名: {1}. 附带信息:{2}",
eventArgs.Method.Name, eventArgs.Instance , message );
}
}
引用postsharp相关dll后(1.5: postsharp.laos ,postsharp.public .2.0 就 postsharp ) 再实现某个类型的 attribute : 继承自 AttributeTargets (1.5 的namespace 是 PostSharp.public ,2.0 好像 PostSharp.Aspects )
[global::System.AttributeUsage(AttributeTargets.All, AllowMultiple=true)]
public class PostsAttribute : OnMethodBoundaryAspect
{
/* PostSharp 2.0 里可用的方法
public override void OnSuccess(MethodExecutionArgs args)
{
Console.WriteLine("...{0}...onsuccess......", DateTime.Now);
base.OnSuccess(args);
Log.Write(args);
}
*/
private string _msg = string.Empty;
public PostsAttribute(string message) {
_msg = message;
}
public override void OnEntry(MethodExecutionEventArgs args)
{
Console.WriteLine("...{0}...onEntry......", DateTime.Now);
base.OnEntry(args);
}
public override void OnExit(MethodExecutionEventArgs args)
{
Console.WriteLine("...{0}...OnExit......" , DateTime.Now);
base.OnExit(args);
}
}
准备就绪后使用:
{
static void Main() {
Speak("我开始哈");
EndSpeak();
Console.ReadKey();
}
[Posts("开始说话了..")]
private static void Speak(string message) {
Console.WriteLine(".{0}.....正式执行了....", message);
}
[Posts("error:")]
[onException("endspeak")]
static void EndSpeak() {
Console.WriteLine("会发生错误的调用......");
throw new Exception("====== 这是故意发生的错误.===");
}
}
运行结果:
完整的 test 见源文件: 下载
安装文件下载:/Files/infozero/PostSharp安装文件.rar
使用PostSharp开始AOP相关推荐
- PostSharp AOP编程:1.基于PostSharp的AOP日志记录和异常捕捉【附带源码】
AOP(基于切面编程):它是对业务逻辑的分离,使各个业务直接的耦合变低,比如在传统的OOP编程中将日志记录.异常处理.权限管理等方面剥离出来.在今后的维护过程中,对其改变日志记录.异常处理.权限管理方 ...
- PostSharp的AOP设计在.NET Remoting中的应用
在.NET Remoting技术中实现用户的验证和授权并不那么容易,尤其是将其宿主在windows service这样的环境中的时候.大部分时候,我们都需要实现自定义的验证方式.具体来说也不是那么复杂 ...
- 使用PostSharp进行AOP框架设计:一个简单的原型
AOP已经不是一个什么新名词了,在博客园使用关键字搜索可以查出n多条关于AOP的介绍,这里就不再赘述了. 在Bruce Zhang's Blog里面有很多关于AOP介绍及其在.net下实现研究,总觉得 ...
- 由浅入深CIL系列【目录索引】+ PostSharp AOP编程【目录索引】
CIL简介:CIL(Common Intermediate Language)中文名为通用中间语言,注意它曾经被称为微软中间语言或MSIL,它是一种类似于JAVA字节码的语言.在微软语言平台中,不管程 ...
- 【ABP杂烩】面向切面编程(AOP)知识总结
目录 1.存在问题 2.AOP的概念 3.AOP应用范围 3.AOP实现方式 4.应用举例 5.结束语 本文在学习[老张的哲学]系列文章AOP相关章节后,自己归纳总结的笔记. 1.存在问题 最近,其它 ...
- Net中的AOP系列之《将AOP作为架构工具》
返回<.Net中的AOP>系列学习总目录 本篇目录 编译时初始化和验证 编译时初始化 切面验证的正确用法 真实案例:复习线程 架构约束 强制架构 真实案例:NHibernate 多播 类级 ...
- AOP在 .NET中的七种实现方法
这里列表了我想到的在应用程序中加入AOP支持的所有方法.这里最主要的焦点是拦截,因为一旦有了拦截其它的事情都是细节. Approach 方法 Advantages 优点 Disadvantages 缺 ...
- .NET静态代码织入——肉夹馍(Rougamo)
肉夹馍是什么 肉夹馍通过静态代码织入方式实现AOP的组件..NET常用的AOP有Castle DynamicProxy.AspectCore等,以上两种AOP组件都是通过运行时生成一个代理类执行AOP ...
- Attribute鲜为人知的两个特性记录
Attribute作为一种标记在我们的.net中随处可见,比如DatContract,DatMember,Serializable等等,各种用途的标记.是的我们的代码更加简洁,对于Attribute用 ...
最新文章
- LeetCode简单题之合并两个链表
- 如果孩子想学编程,你会推荐哪个? | 每日趣闻
- Lambda表达式介绍
- Tensorflow的高级封装
- 简历javaweb项目描述怎么写_硬件工程师简历-项目经验怎么写【范文】
- (10)Zynq IIC控制器介绍
- c++随机打乱数组_编程之路之php数组操作详解【文末有惊喜】
- android实机闪退,安卓模拟器,安卓真机,进入播放界面就会闪退
- 将Numpy数组保存为图像
- Linux文件系统之inode与软硬连接
- Asp.Net数据控件遍历
- 【Excel_007】利用excel进行线性规划求解
- 【论文阅读笔记】FCOS代码结合论文阅读
- 笔记本连接无线却找不到服务器,笔记本win7系统无线网络找不到无法连接wifi怎么办...
- Android kernel中wakeup_sources解析
- C指针原理(32)--C语言-pvm并行计算
- vue之axios封装
- dw在html中删除css样式表,DW里CSS的详细介绍
- 餐饮外卖平台小程序源码,附带详细教程
- matlab simulink 代数环问题解决