我可以在类库中向AppDomain.CurrentDomain.UnhandledException添加处理程序

时间:2011-06-09 13:54:38

标签: c# class-library unhandled-exception

我想订阅AppDomain.CurrentDomain.UnhandledException事件以捕获任何错误,因为我正在尝试新的设计模式,我不希望在每个事件上都设置try catch。

通常在win form app中有一个主入口点,但这是一个由另一个应用程序调用的类库。

在类库中是否有一个主入口点可以挂钩此事件,或者只是在类库中是不可能的,除非我确定在其他任何方法之前调用一个方法?

2 个答案:

答案 0 :(得分:1)

不,类库没有主入口点。如果您觉得自己需要一个,那么您可以通过公共API表面区域在概念上创建一个虚拟API。换句话说,限制哪些对象是公共的,并且在那些公共对象中确保在某个时刻进行调用。在做任何事情之前,可以采取某种工厂调用来设置您的库。

答案 1 :(得分:0)

// Set the unhandled exception mode to force errors to go through our handler. 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

// Add the event handler for handling thread exceptions to the event.
AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

感谢Brian Dishaw

显然,这并没有给你一些非声明性的方式来分配处理程序,ala在app.config中确定一个跟踪侦听器但是,这给了我一个想法。

您可以编写自己的配置部分来执行此代码。然后当加载配置时你可以分配事件处理程序,我会找到一些如何做到这一点的链接...

但是,您的配置必须存在于主应用程序中,所以这可能不对。

编辑抱歉,如果没有某种类型的IoC框架,我认为没有办法做到这一点,还有什么能加载你的课程。我能想到的唯一选择都需要对主应用程序进行某种更改。

我对错误感兴趣。