我的场景 我的 DLL 中的许多类都利用一些常见的服务,例如日志记录。这些公共(public)服务都需要初始化。由于我不知道将首先构造哪些类,因此我在所有构造函数中都包含与此类似的代码
Logger.Configure();
问题 有没有办法在我的 DLL 首次加载时订阅事件,以便在那里初始化公共(public)服务,从而允许我的类假设公共(public)服务已准备好使用。
我查看了AssemblyLoadEventHandler ,但该示例演示了它在可执行文件上下文中的使用,其中事件在应用程序启动时在 Main 方法中注册。
最佳答案
最简单的方法是使用 class constructor (又名静态构造函数)存在于需要它的类中,因此每个类会执行一次。但这仍然感觉不对。
但是您可以封装这些调用(按照 James 的建议),然后在封装类的类构造函数中进行初始化,这样您就可以编写一次代码并运行一次初始化。
...或者更复杂的事情是定义一个模块初始值设定项。这是加载程序集时运行的一段代码,正是您正在寻找的内容。但它并不那么容易访问,因为 C# 编译器不提供一种开箱即用的编写方法。
这就是 Fody/ModuleInit发挥作用。这是一个织工。您编写一个类,然后在编译后,Fody 将您的类转换为模块初始值设定项。对于您的特定情况(通过封装技术)是否值得麻烦由您决定。
关于c# - 如何在第一次调用 .NET dll 时运行方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30245228/