从类库中抛出单个自定义异常

时间:2013-04-15 09:03:25

标签: c# .net design-patterns

如何在C#中的类库项目中编写捕获所有异常处理程序,这将使外部调用者只对库中发生的任何异常提供一个自定义异常。

我发现最接近的解决方案是实现一个Facade类,从中调用低级类,并在Facade的每次调用中编写try..catch,如果下面发生任何异常,将抛出单个自定义异常。

我搜索了解决方案,但仅针对Web应用程序(使用应用程序上下文捕获异常) 例如How to implement one "catch'em all" exception handler with resume?

我需要在类库级别或库级别的使用者中实现它,但如果可以通过编写最小异常处理语句来完成它。

2 个答案:

答案 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,但请务必仔细阅读文档 - 有些例外情况无法处理,而且还取决于您使用的框架版本。