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

标签 c# dll

我的场景 我的 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/

相关文章:

c# - 为什么 .* 无法匹配此正则表达式中的整个(其余)字符串?

c# - Dictionary.Last() 的返回值是否未定义?

javascript - 使用 jQuery 将无序列表所选项目传递到 ASP.NET Web 窗体

c++ - Visual Studio,未找到 .dll(从未要求过)

c++ - 使用 Gradle cpp 插件生成 DLL

c# - .Net 框架 mscorpe.dll 错误

c# - 使用 EZApi 和 OLEDBSource 自动映射列

c# - 如何使用 nhibernate SchemaUpdate 功能更改列

C# dllimport 在被 Process.Start 调用时抛出 SEHException

c# - 从 C++ COM DLL 回调到 C# 应用程序