使用PostSharp开始AOP
2010-07-05 08:52
169 查看
近段时间有时间看看以前写的代码,系统有一个功能:用户的任意一个修改,删除操作都要进行日志记录,当时进度太赶,也只是知道 aop(关于什么是 aop 请自行google) 能处理这方面的问题,具体的还没接触 :( . --- 当时我的处理方式是将日志写为一个静态方法,然后在每个操作完成后加上: Log.write(用户ID, "操作信息") ;随着系统的增大,新的功能新的成员不断地加入, 问题就出现了.每个成员都会问:这个日志该怎么记录(虽然有文档,可总是感觉不太方便)?
近几天接触 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:
如何调用:
class Start
{
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 见源文件: 下载
// /article/5937368.html
if ($ != jQuery) {$ = jQuery.noConflict();}
// ]]>
近几天接触 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:
如何调用:
class Start
{
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 见源文件: 下载
// /article/5937368.html
if ($ != jQuery) {$ = jQuery.noConflict();}
// ]]>
相关文章推荐
- 使用PostSharp开始AOP
- 使用PostSharp开始AOP
- 使用PostSharp开始AOP
- 使用PostSharp进行AOP框架设计:一个简单的原型
- 使用PostSharp 在.NET 平台上实现 AOP
- 使用PostSharp 在.NET 平台上实现 AOP
- .net中使用postsharp来实现aop
- 在.NET项目中使用PostSharp,实现AOP面向切面编程处理
- 使用PostSharp进行AOP框架设计:从一个简单的原型
- 使用SeleniumWebDriver开始自动化-简单示例
- SpringAOP使用注意事项
- spring的aop的使用
- 使用Java原生代理实现AOP
- 使用JDK中的Proxy技术实现AOP功能
- 开始使用 Vagrant
- ASP.NET Core中使用IOC三部曲(三.采用替换后的Autofac来实现AOP拦截)
- Esp8266学习之旅② 利用GPIO开始使用按钮点亮你的“第一盏灯”。(附带demo)
- [译] THREE.JS入门教程-1.开始使用THREE.JS
- [其他]Gson的简单使用(开始到结束)
- 现在就开始使用AngularJS的三个重要原因