2013-07-26 49 views
4

是否有办法捕获和处理类库中任何方法中引发的所有异常的异常?C#中类库的全局错误处理程序

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

好处是更容易开发,并且不需要在每种方法中重复执行相同的操作。

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

您可以使用ContextBoundObject –

+0

你能分享一些示例代码,但前提是你有吗?谢谢 – Sunil

回答

4

您可以订阅全局事件处理像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 
    } 
} 
+0

只是好奇。这将涉及反射时获取exceptionObject.TargetSite.DeclaringType.Assembly? – Sunil

+0

'TargetSite'属性返回抛出当前异常的'MethodBase'类型的方法。 'MethodBase'类型是反射库的一部分,因此反射将被使用。 –