C# 从类库中引发单个自定义异常
如何在C#中的类库项目中编写一个捕获所有异常的异常处理程序,该处理程序将只为外部调用程序提供一个库中发生的任何异常的自定义异常 我找到的最接近的解决方案是实现一个C# 从类库中引发单个自定义异常,c#,.net,design-patterns,C#,.net,Design Patterns,如何在C#中的类库项目中编写一个捕获所有异常的异常处理程序,该处理程序将只为外部调用程序提供一个库中发生的任何异常的自定义异常 我找到的最接近的解决方案是实现一个Facade类,从中调用低级类,并在Facade的每个调用中写入try..catch,如果下面发生任何异常,它将抛出一个自定义异常 我搜索了解决方案,但只在Web应用程序中找到(使用应用程序上下文捕获异常) e、 g 我需要在类库级别或库的使用者级别实现它,但如果可以通过编写最少的异常处理语句来实现,那就很好了。您可以使用,但请确保您彻
Facade
类,从中调用低级类,并在Facade的每个调用中写入try..catch
,如果下面发生任何异常,它将抛出一个自定义异常
我搜索了解决方案,但只在Web应用程序中找到(使用应用程序上下文捕获异常)
e、 g
我需要在类库级别或库的使用者级别实现它,但如果可以通过编写最少的异常处理语句来实现,那就很好了。您可以使用,但请确保您彻底阅读了文档-有些异常您无法处理,它还取决于您使用的框架版本。您可以使用:
但说真的,不要这样做。异常不应以这种方式处理,您应该在本地捕获它们。您的意思是,存在一个可以抛出任何内容的现有库,并且您希望使它看起来好像只抛出(新)的异常特定类型?@Jon我正在编写一个库,我希望它只在外部抛出一个自定义异常。您是否考虑过使用
AOP
框架?@ImranRizvi:那么,除了从您的代码中抛出新的MyCustomException(…)之外,不要编写任何其他内容。有什么问题吗?尽管我不得不说这听起来并不是一个普遍的好主意。你为什么要这样做?看看这里+1的警告。尽管如此,这只有在您希望记录异常(如果可能)并在该异常后关闭时才有意义。谢谢,它映射到需求,这是唯一可用的选项吗?我也会考虑你的警告,我应该在哪里写这个,怎么写?我想在类库中预先编写…这不适用于整个应用程序中的错误,而不仅仅是类库中的错误吗?是的,它会-我错过了作用域只是类库的部分。但是,您可以检查堆栈跟踪并检查异常的来源。@ZdeslavVojkovic它不会只捕获当前AppDomain
中的问题吗?这需要为使用中的每个AppDomain
订阅。如果在library的引导代码中完成,则将为加载库的每个AppDomain完成。由于OP似乎只关心其库中的异常,这应该足够了。
AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
{
var exception = e.ExceptionObject as Exception;
if (exception != null && exception.Source == "MyLib")
{
// Do stuff here
}
};