簡體   English   中英

我需要一種將所有方法包裝在try catch中的方法

[英]I need a way to wrap all my methods inside try catch

如果存在一種方法,我可以將所有方法包裝在try catch中,而無需在每個方法中編寫try catch。

當前,我們正在使用以下提到的方法:

public TValue ErrorHandler<TValue>(Func<TValue> action)
    {
        try
        {
            return (TValue)action();
        }
        catch (Exception ex)
        {
            //Handle Exception and Log it..........
            return default(TValue);
        }
    }

    public void ErrorHandler(Action action)
    {
        try
        {
            action();
        }
        catch (Exception ex)
        {
            //Handle Exception and Log it..........
        }
    }

用作:

public void ClearControls()
    {
        this.ErrorHandler(() =>
        {
               //................................
        });
    } 

由於這在其中使用Lambda,因此如果在調試時編輯了代碼,它將強制再次運行應用程序。

請讓我知道任何其他可能的解決方案,在該解決方案中,我可以在所有方法中實施Try Catch並調試我的代碼而沒有任何麻煩。

諸如PostSharp之類的AOP框架可以在這里為您提供幫助。 有關於一個博客帖子OnExceptionAspect 這里

基本上是最終結果,而不是將try-catch放入方法中,而是使用屬性(在這種情況下為方面)裝飾方法。

就我個人而言,我從來沒有真正使用過它,因為我只嘗試/捕獲我可以處理的事情,而從未需要過諸如按方法記錄整個應用程序之類的東西。 如果您無法處理,請不要抓住它。


更新:根據您的評論,PostSharp的替代產品是Castle DynamicProxy ,它是免費的。 關於PostSharp許可證,您應該能夠從免費版本中獲得所需的行為,該免費版本涵蓋了方法級別的aspest,如此處所述

  • 不要將所有內容都包裹在try-catch 在通常可能看到異常而代碼中沒有錯誤的地方(例如IO操作)使用try-catch 如果包裝了所有內容,則實際上可能會使測試和調試更加困難,從而導致較低質量的代碼。 讓漏洞冒出來,並在開發的早期階段將它們捕獲。
  • 編寫一個處理程序方法,該方法執行日志記錄以及您要在try-catch執行的所有其他常見操作,並在catch塊中簡單地使用該方法。
  • 通過訂閱AppDomain.Current.UnhandledException事件,使用全局異常處理程序記錄由try-catch塊未處理的異常。

最簡單的解決方案是捕獲調用方中的錯誤,或者更進一步,即通常是Program.cs或global.asax.cs的線程入口點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM