如何在第一次调用. net dll时运行方法

本文关键字:dll 运行 方法 net 调用 第一次 | 更新日期: 2023-09-27 17:49:19

我的场景我的DLL中的许多类都利用了一些常见的服务,比如日志记录。这些公共服务需要初始化。因为我不知道首先构造哪些类,所以我在所有构造函数

中都包含了类似的代码。
Logger.Configure();

是否有一种方法可以在我的DLL第一次加载时订阅一个事件,以便在那里初始化公共服务,从而允许我的类假设公共服务已经准备好可以使用。

我查看了AssemblyLoadEventHandler,但示例演示了它在可执行程序的上下文中的使用,其中在应用程序启动时将事件注册在Main方法中。

如何在第一次调用. net dll时运行方法

最简单的方法是在需要的类中使用类构造函数(又名静态构造函数),因此它将在每个类中执行一次。但是感觉还是不对

但是您可以封装调用(按照James的建议),然后在封装类的类构造函数中进行初始化,因此您编写一次代码并运行一次初始化。

…或者更复杂的事情是定义一个模块初始化项。这段代码在加载程序集时运行,正是您所需要的。但是访问它并不是那么容易,因为c#编译器并没有提供一种开箱即用的方法。

这就是Fody/ModuleInit发挥作用的地方。这是一个编织器。您编写一个类,然后在编译之后,Fody将您的类转换为模块初始化器。对于您的特殊情况(而不是封装技术),是否值得这样做取决于您的决定。

从c# 9开始,你可以尝试ModuleInitializer属性

有一些限制,例如ca2255