簡體   English   中英

如何在第一次調用 .NET dll 時運行方法?

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

我的場景我的 DLL 中的許多類都利用了一些常見的服務,例如日志記錄。 這些公共服務需要初始化。 由於我不知道首先構造哪些類,所以我在所有構造函數中包含了與此類似的代碼

Logger.Configure();

問題有沒有辦法在我的 DLL 首次加載時訂閱事件,以便在那里初始化公共服務,從而允許我的類假設公共服務已准備好使用。

我查看了AssemblyLoadEventHandler ,但該示例演示了它在可執行文件的上下文中的使用,其中事件在應用程序啟動時在 Main 方法中注冊。

最簡單的方法是在需要它的類中使用類構造函數 (也稱為靜態構造函數 ),因此每個類將執行一次 但這仍然感覺不對

但是您可以封裝這些調用(按照James的建議),然后在封裝類的類構造函數中進行初始化,因此只需編寫一次代碼,然后運行一次初始化即可。

...或更復雜的事情是定義一個模塊初始化器 這是一段在您的程序集加載時運行的代碼,正是您要尋找的代碼。 但這並不是那么容易訪問,因為C#編譯器沒有提供一種開箱即用的方法。

這就是Fody / ModuleInit起作用的地方。 這是一個編織者 您編寫一個類,然后在編譯之后,Fody將您的類轉換為模塊初始化程序。 對於您的特殊情況(通過封裝技術),是否值得進行麻煩由您決定。

起始C# 9 你可以試試ModuleInitializer屬性

有一些限制,例如ca2255

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM