国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

在 ASP.NET 中用匿名委托簡單模擬 AOP 做異常和日志處理

2024-07-10 13:09:17
字體:
來源:轉載
供稿:網友

這兩天寫 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.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汉寿县| 兴山县| 保山市| 大悟县| 广饶县| 新巴尔虎右旗| 疏勒县| 上蔡县| 康平县| 松桃| 修武县| 铁力市| 仲巴县| 北辰区| 丰镇市| 永济市| 深州市| 太原市| 南乐县| 巴林左旗| 靖江市| 平陆县| 绵竹市| 陈巴尔虎旗| 安吉县| 兴山县| 昭通市| 太白县| 北票市| 盐津县| 普安县| 许昌县| 樟树市| 双牌县| 广丰县| 沙田区| 郴州市| 竹山县| 资溪县| 盐边县| 芷江|