關於什麼是AOP(aspect-oriented programming),我想還是參考專業的91哥解釋比較恰當…
但如果…客戶不允許你用MVC勒…(在下最痛恨這種情況發生…),那只好自己來…接下來的範例,會呈現一個搭配NLog並以AOP實作Function Log的小程式。原由是在下公司有些歷史包袱…
Step1, 建立自訂的屬性(Attribute) 類別(For Class & For Method)
For Class, 建立了一個AopLoggerAttribute, 需繼承ContextAttribute並實作IContributeObjectSink介面
For Method, 建立了一個AopLoggerMethodAttribute, 需繼承Attribute
建立完後,編譯一定不會過,因為還沒建立AopLoggerHandler…
Step2, 建立AopLoggerHandler
僅列出其主要的程式片段,完整程式碼請由此下載
在此片段中,共有四大步驟
- 執行原方法前,寫一行Log
- 執行原方法
- 若執行原方法時發生Exception,則寫一行Log
- 方法執行結束,寫一行Log
Step3, 將需要追蹤的類別
- 繼承ContextBoundObject
- 在類別上加入AopLoggerAttribute
- 於Method上加入AopLoggerMethodAttribute。
呼叫DoSomething方法就會得到以下Log
呼叫DoSomethingException方法就會得到以下Log
後記: 個人暫時還無法想到如何解決,若要追蹤Form.cs內的Function該怎麼辦…因為要被追蹤的類別要繼承ContextBoundObject,但WinForm程式Form.cs又必需繼承Form…若有前輩先進們有解決方法,也請不吝分享,謝謝。
完整範例下載
沒有留言:
張貼留言