一个C#类库的全局错误处理程序

6

有没有一种方法可以捕获和处理类库中任何方法抛出的所有异常的异常?

我可以在每个方法中使用try catch结构,如下面的示例代码,但我正在寻找一个用于类库的全局错误处理程序。该库可以被ASP.Net或Winforms应用程序或另一个类库使用。

好处是更容易开发,无需在每个方法中重复执行相同的操作。

public void RegisterEmployee(int employeeId)
{
   try
   {
     ....
   }
   catch(Exception ex)
   {
     ABC.Logger.Log(ex);
   throw;
   }
}  

你可以使用ContextBoundObject。 - user448516
你能分享一些示例代码吗?但只有在你有的情况下。谢谢。 - Sunil
1个回答

6

您可以订阅全局事件处理程序,如AppDomain.UnhandledException并检查抛出异常的方法:

AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;

private static void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs)
{
    var exceptionObject = unhandledExceptionEventArgs.ExceptionObject as Exception;
    if (exceptionObject == null) return;
    var assembly = exceptionObject.TargetSite.DeclaringType.Assembly;
    if (assembly == //your code)
    {
        //Do something
    }
}

只是好奇。在获取exceptionObject.TargetSite.DeclaringType.Assembly时,这是否涉及反射? - Sunil
TargetSite 属性返回引发当前异常的 MethodBase 类型的方法。 MethodBase 类型是反射库的一部分,因此将使用反射。 - Vyacheslav Volkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接