我想覆蓋try/catch/finally塊或創建一個新的myTry/myCatch/myFinally塊,在內部有一個特定的「自動」行爲。 例如,要記錄一個異常,開發人員必須顯式調用Log(ex)方法。 =>try{...}catch(Ex ex){ **Log(ex)**; doSomething(); throw; }
如何覆蓋或創建一個新的try/catch/finally塊.net c#
但是如果開發者忘記調用Log(ex),那麼什麼都不會發生。
我想創建一個能夠在裏面做一些事情的結構,比如模板模式。是這樣的:
MyTryWithAutomaticInternalLog {
doSomething();
}
MyCatch(Exception ex){
**//Internally this stores in someplace the exception**
doSomething2(ex);
throw;
}
MyFinally {
//internally this saves how much time took the execution for example.
doSomething3();
}
還有像其他的選擇: 1)創建像 MyTryWithAutomaticInternalLog(()=>{ doSomething(); }, (ex)=>{ doSomethingOnError(); },()=>{ doSomethingInfinally(); });
和MyTryWithAutomaticInternalLog內與模板圖案戰略的包裝方法,管理流程,但再次重申,開發人員必須記得用方法MyTryWithAutomaticInternalLog而不是非常標準的try/catch/finally。
2)避免在代碼中使用try/catch,並用依賴注入模式管理異常。但我想避免它。
還有其他的選擇嗎?我怎麼能覆蓋try/catch/finally塊?如果不是的話,如果您提供了一些技術信息和鏈接,我會很感激,因爲我搜索沒有太多運氣。
TKX
你想要自動日誌if並且只有當調用者忘記自己做了嗎?只需添加日誌記錄和調用方的方法來抑制它。日誌記錄系統標誌,類屬性或函數的可選參數。編輯:如果這是一個實際問題,也應該使用日誌記錄系統。 Log4net或其他。這些問題已經解決了很多 – zzxyz