基本的な紹介:
Observerパターンは、オブジェクトの行動パターンです。これは、オブジェクトの状態が変更されたときに、それに依存するすべてが通知され、自動的に更新され、-多くの主題間の依存関係を定義します。オブザーバ・モードでは、対象は、そのオブザーバーは、オブザーバーの任意の数の購読と通知を受け取ることができるかを知るために必要がない場合、気づく出版社の告知です。オブザーバーパターンだけ広く、ビジネス・オブジェクト、著作権管理の間の相互作用の観点から、ソフトウェアのインターフェイス要素の間の相互作用に使用されていない、また、アプリケーションの広い範囲を持っています。
ステップ:カスタムフィルタエラークラス(MyExceptionFilterAttribute.cs)
1 使用Sam.OA.Commonと、 2 使用System.Web.Mvcと、 3 4 名前空間Sam.OA.WEBAPP.Models 5 { 6 パブリック クラスMyExceptionFilterAttribute:HandleErrorAttribute 7 { 8 パブリック オーバーライド ボイドonExceptionを(ExceptionContext filterContext) 9 { 10 塩基.OnException(filterContext)。 11 LogHelper.WriteLog(filterContext.Exception.ToString())。 12 } 13 } 14 }
ステップ2:復興RegisterGlobalFilters.cs
1 使用Sam.OA.WEBAPP.Modelsと、 2 使用System.Web.Mvcと、 3 4 名前空間Sam.OA.WEBAPP 5 { 6つの パブリック クラスに、FilterConfig 7 { 8 パブリック 静的 ボイドRegisterGlobalFilters(GlobalFilterCollectionフィルタ) 9 { 10 // filters.Add(新しいHandleErrorAttribute())。 11 filters.Add(新しい MyExceptionFilterAttribute())。// 添加自定义错误类 12 } 13 } 14 }
第三段階:オブザーバーパターン実装操作ログ
ログインタフェース(ILogWrite.cs)
1 名前空間Sam.OA.Common 2 { 3。 /// <まとめ> 4。 /// ログファイルインターフェイス 5。 /// </要約> 6。 パブリック インターフェイスILogWrite 7。 { 8。 ボイド WriteLogInfo(文字列TXT); 9 } 10 }
ログファイル(TextFileWriter.cs)
1 名前空間Sam.OA.Common 2 { 3。 パブリック クラスTextFileWriter:ILogWrite 。4 { 5 /// <まとめ> 6 /// エラー情報ファイルに 7。 /// </要約> 8。 /// <PARAM名= "TXT"> </ PARAM> 9 公共 ボイド WriteLogInfo(文字列TXT) 10 { 11 // 特定の実装戦略。。。。 12 } 13 } 14 }
SQLServer記録媒体(SqlServerWriter.cs)
1 使用してシステムを。 2 使用System.Collections.Genericと、 3 使用System.Linqのを。 4 使用System.Textのを。 5 使用System.Threading.Tasksと、 6 7 ネームスペースSam.OA.Common 8 { 9 パブリック クラスSqlServerWriterの:ILogWrite 10 { 11 /// <要約> 12 /// 记录のSQLServer数据库中 13 /// </要約> 14 /// <PARAM NAME =」 TXT "> </ param>の 15 の公共 のボイドWriteLogInfo(文字列TXT) 16 { 17 // 特定の実装をスキップ。。。。 18 } 19 } 20 }
クラスを助けるためにログファイルを(LogHelper.cs)
1 使用してシステムを。 2 使用System.Collections.Genericと、 3 使用System.Threadingと、 4 5 名前空間Sam.OA.Common 6 { 7 パブリック クラスLogHelper 8 { 9 パブリック 静的キュー< ストリング > ExceptionStringQueue = 新しいキュー< ストリング > (); 10 パブリック 静的リスト<ILogWrite> LogWriteList = 新しいリスト<ILogWrite> (); 11 静的LogHelper() 12 { 13 LogWriteList.Add(新しいTextFileWriter())。 14 LogWriteList.Add(新しいSqlServerWriterの())。 15 ThreadPool.QueueUserWorkItem(OBJ => 16 { 17 ロック(ExceptionStringQueue) 18 { 19 列 STR = ExceptionStringQueue.Dequeue(); 20 foreachの(VARの logWrite でLogWriteList) 21 { 22 logWrite.WriteLogInfo(STR)。 23 } 24 } 25 }); 26 } 27 公共 静的 ボイド WRITELOG(ストリングexceptionText) 28 { 29 試みる 30 { 31 ロック(ExceptionStringQueue) 32 { 33 ExceptionStringQueue.Enqueue(exceptionText)。 34 } 35 } 36 キャッチ(例外EX) 37 { 38 スローEXを。 39 } 40 } 41 } 42 }