如何在C#中的类库项目中编写捕获所有异常处理程序,这将使外部调用者只对库中发生的任何异常提供一个自定义异常。
我发现最接近的解决方案是实现一个Facade
类,从中调用低级类,并在Facade的每次调用中编写try..catch
,如果下面发生任何异常,将抛出单个自定义异常。
我搜索了解决方案,但仅针对Web应用程序(使用应用程序上下文捕获异常) 例如How to implement one "catch'em all" exception handler with resume?
我需要在类库级别或库级别的使用者中实现它,但如果可以通过编写最小异常处理语句来完成它。
答案 0 :(得分:4)
你可以使用:
AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
{
var exception = e.ExceptionObject as Exception;
if (exception != null && exception.Source == "MyLib")
{
// Do stuff here
}
};
但严重的是,不要这样做。不应该以这种方式处理异常,你应该在本地捕获它们。
答案 1 :(得分:1)
您可以使用AppDomain.UnhandledException
,但请务必仔细阅读文档 - 有些例外情况无法处理,而且还取决于您使用的框架版本。