ここ 2 日間、ASP.NET をめまいがしながら書いていて、いつも怠けたいと思っています。バックグラウンド コードのほとんどすべてのメソッドで try..catch が必要になるため、非常に面倒に感じます。 AOPも思い出しますが、AOPの手法は比較的複雑で、手法もたくさんあります。たとえば、動的プロキシ、属性、または送信などを使用します。突然、C# 2.0 の新機能である匿名委任のことを思い出し、それは少し醜いものだと思いました。 。 。ただし、実際には、比較的軽量な方法で AOP の効果を単純にシミュレートすることもできます。
// asp.net でページ基本クラスを強制する要件は過剰ではありません。 。 。
パブリック部分クラス TestLogger: PageBase {
protected void Page_Load(オブジェクト送信者, EventArgs e) {
// このメソッドはページの基本クラスに実装されており、一般的な例外処理、ロギング ロジックなどをその中で実装できます。
TryDo(
// ここで実際の作業が行われます
デリゲート() {
int a = 1;
int b = 0;
int c = a / b;
}、
// これはオプションの例外処理です。null を渡すと、例外は単に無視されます。
デリゲート() {
Response.Write("申し訳ありません、エラーが発生しました。");
}
);
}
}
ページ基本クラスの実装コードは非常にシンプルであり、統一管理も容易です。ここでは、単純に log4net を使用して例外をログに記録すると仮定します。
システムを使用する;
System.Web.UI を使用します。
log4net
名前空間を使用します。
// 匿名のデリゲートを渡すための単純なデリゲートを定義します
パブリックデリゲート void MyAction();
//ページの基本クラスを定義する
パブリック クラス PageBase : ページ {
protected ILog logger;
// すべての例外処理ロジックはページの基本クラスで集中的に処理されます。
protected void TryDo(MyAction doHandler, MyActionExceptHandler) {
試す {
// 実用的なことをする
doHandler();
} catch (例外例) {
// 単純な例外ログ
ロガー.エラー(例);
// その他の処理
// 。 。 。
// カスタム例外処理を呼び出します。ここでは例外の特定の情報は返されません。とにかくユーザーに見せる必要がないからです。 。 。
if (ハンドラーを除く != null)
例外ハンドラー();
}
protected オーバーライド void OnInit(EventArgs e)
{
// ここでロガーを初期化します。GetType() はサブクラスの実際の型を取得できます。
ロガー = LogManager.GetLogger(this.GetType())
;
}
}
}
さて、ここで書くのはやめましょう。これは私の単なる考えです。目的は、例外またはログの一元管理を軽量な方法で実装することです。もちろん、これは完全な AOP コンセプトとは比較になりませんが、そうは言っても、現時点では .NET には完全な AOP フレームワークが存在しないように思えます。
http://www.cnblogs.com/RChen/archive/2006/11/16/aspnet_Exception_handling.html