C# 是否可以在类库中全局订阅事件?

C# 是否可以在类库中全局订阅事件?,c#,.net,C#,.net,在C#类库项目中,可以全局订阅事件?例如,假设项目包含10个类。如果我必须订阅AppDomain.UnhandledException事件,我可以在每个类中都有这行代码 AppDomain.CurrentDomain.UnhandledException += MyExceptionHandler; 有没有一种方法可以声明这一点,这样代码就不需要在一个dll中重复?假设异常处理程序对所有类和从这些类创建的实例都是通用的(akaMyExceptionHandler可以是helper类中的静态方法

在C#类库项目中,可以全局订阅事件?例如,假设项目包含10个类。如果我必须订阅
AppDomain.UnhandledException
事件,我可以在每个类中都有这行代码

AppDomain.CurrentDomain.UnhandledException += MyExceptionHandler;

有没有一种方法可以声明这一点,这样代码就不需要在一个dll中重复?

假设异常处理程序对所有类和从这些类创建的实例都是通用的(aka
MyExceptionHandler
可以是helper类中的静态方法),然后,您可以尝试使用模块初始值设定项,这将允许您在加载程序集时运行代码

看这个。特别是,答案中的一条注释将为您提供一种更简单的方法()来利用此功能,此功能自CLR 2.0以来就可用,但在C#中未公开


话虽如此,这似乎是一个非常不常见的要求,因为通常对未处理异常的通知感兴趣的一方是应用程序本身,而不是应用程序加载的库。

您的意思是自动向程序集中的每个类订阅一个事件,其中每个类都不是从同一基类派生的吗?可能是反射仅供参考,如果您在每个类中都使用这行代码,那么您将为这10个类中的任何一个类的每个实例注册一次事件,并且当事件触发时,它将被“处理”那么多次—可能不是您想要的。@jamesbarras Hi。是的,完全正确。@adv12是的,我没有想到那一点。在那种情况下你会怎么做?如果类不都是静态的,也就是说,@RB.,将其放入10个类的静态构造函数中仍然会导致调用10个处理程序,而且具有应用程序级逻辑也没有意义(当抛出未处理的异常时该怎么办)在本身不是应用程序级类的随机类中。当您更新您的答案时,我正要发布一个关于
Fody/ModuleInit
的答案。我个人从未使用过它,但它似乎对这种情况很感兴趣。虽然,我必须承认,我对所描述场景背后的动机有点好奇。我习惯于只在应用程序级别订阅该事件。我从来不知道模块初始值设定项。这看起来很复杂,但Fody/ModuleInit项目看起来很有趣。这背后的动机是一个特定于域的第三方api,它在我必须使用的特定版本中有一个已知的bug。有多个类可能导致(大部分)预期的错误,我可以为这些错误编写变通方法。啊,第三方问题的变通方法,通常需要一些创造性的解决方案。