如何在第一次调用 .NET dll 时 运行 一个方法?

How to run a method on the first call to a .NET dll?

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

Logger.Configure();

问题 有没有一种方法可以在我的 DLL 首次加载时订阅一个事件,以便在那里初始化公共服务,从而允许我的 类 假设公共服务已准备就绪。

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

最简单的做法是在需要它的 classes 中使用 class constructor(又名 静态构造函数),所以它会每 class 执行一次 。不过还是觉得不对.

但是你可以封装调用(按照 James 的建议),然后在封装 class 的构造函数中进行初始化 class,这样你只需要编写一次代码就可以 运行初始化一次。

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

这就是 Fody/ModuleInit 发挥作用的地方。这是一个编织者。你写一个 class,然后,在编译之后,Fody 把你的 class 变成一个模块初始化器。对于您的特定情况(通过封装技术)是否值得麻烦由您决定。