All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
ASP.NET,2.0,Web窗体语法指导_[Asp.Net教程]
PHP中session详解_[PHP教程]
ASP.NET2.0,上传图片并为用户创建相应文件夹_.net资料_编程技术
技巧:ASP.NET数据校验部分的封装与应用_.net资料_编程技术
C#中创建用户控件应用实例
教你如何做好SQL Server的数据保护_[SQL Server教程]
Asp.net生成htm静态文件的两种途径_.net资料_编程技术
C#,3.0新特性初步研究,Part2:使用扩展方法_[Asp.Net教程]
如何在十天内学会php之第七天_php资料_编程技术
关于ASP.NET页面打印技术的总结_.net资料_编程技术
Reading number is top 10 pictures
China railway shunting skills competition
Sora aoi calligraphy show
India's national beauty of the college students
这才叫绝色美女2
So beauty, will let you spray blood2
Ashlynn Brooke a group sexy photo2
再发一张清纯美眉的照片
A man's favorite things9
The little girl with long hair3
Small s breast enhancement demonstration
Download software ranking
Ashlynn Video4
c#程序设计案例教程
Such love down(擒爱记)
Tram sex maniac 2 (H) rar bag5
Unix video tutorial1
虚拟机5.5.3版
The king of fighters 97(Mobile phone games-apk)
Boxer's Top ten classic battle1
Sora aoi‘s film--Lust fan wall
WebService在.NET中的实战应用教学视频 → 第5集
aaa published in(发表于) 2013/12/13 9:42:36 Edit(编辑)
在,ASP.NET,中用匿名委托简单模拟,AOP,做异常和日志处理_.net资料_编程技术

在,ASP.NET,中用匿名委托简单模拟,AOP,做异常和日志处理_.net资料_编程技术

在 ASP.NET 中用匿名委托简单模拟 AOP 做异常和日志处理_.net资料_编程技术-你的首页-uuhomepage.com

这两天写 ASP.NET 写晕了,老想偷点懒。由于在后台的代码里几乎每个方法里都要 try..catch 这么来一遍,感觉很烦琐。又联想到 AOP, 但 AOP 的做法相对比较复杂,做法也很多。比如用 Dynamic Proxy, Attribute, 或者 Emit 等。我忽然联想到了 C# 2.0 的新特性匿名委托,觉得这个虽然丑一点。。。不过其实也可以比较轻量级的简单模拟 AOP 的效果:


// asp.net 里面强制做一个页面基类的要求是不过分的。。。
public partial class TestLogger: PageBase {
protected void Page_Load(object sender, EventArgs e) {
// 这个方法实现在页面基类里面,可以往里面实现通用的异常处理,日志逻辑等。
TryDo(
// 这个里面干实际的事情
delegate() {
int a = 1;
int b = 0;
int c = a / b;
},
// 这是一个可选的异常处理,如果传递一个 null 就会干脆忽略异常
delegate() {
Response.Write("Sorry, 发生了一个错误。");
}
);
}
}
在页面基类里面的实现代码就很简单了,也可以方便的统一管理。这里我假定仅仅简单的用 log4net 来对异常做日志记录:
using System;
using System.Web.UI;
using log4net;


namespace SomeNamespace {
// 定义一个简单的委托用于传递匿名委托
public delegate void MyAction();

// 定义页面基类
public class PageBase : Page {
protected ILog logger;


// 页面基类里面集中处理所有异常处理逻辑
protected void TryDo(MyAction doHandler, MyAction exceptHandler) {
try {
// 干点儿实际的事情
doHandler();
} catch (Exception ex) {
// 简单的记录异常
logger.Error(ex);

// 其他一些处理
// 。。。


// 调用自定义的异常处理,这里没有回传 Exception 的具体信息。因为反正没有必要对用户显示了。。。
if (exceptHandler != null)
exceptHandler();
}
}


protected override void OnInit(EventArgs e) {
// 初始化 logger. 正好这里 GetType() 可以取到子类的实际类型
logger = LogManager.GetLogger(this.GetType());


base.OnInit(e);
}
}
}
好了,先写到这里。这只是我的一个简单想法。目的在轻量级的实现异常或日志的集中管理。当然这个和完整的 AOP 概念是没法比的,不过话说回来,好像目前在 .NET 中还没有很完美的 AOP framework.






添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.