如何编写类库的程序集加载/初始化事件处理程序

4

我正在尝试将Java库转换为C#库。我卡在一个地方,无法通过Google找到任何解决方案。问题出在C#类库中,我想编写程序集加载/初始化事件处理程序,这是否可能?在Java中似乎可以实现。

public class abc implements ServletContextListener {

public void contextInitialized(ServletContextEvent event) {
    //do something
}

public void contextDestroyed(ServletContextEvent event) {
    //do something
}
}

在C#中它的等效物是什么?


可能重复:https://dev59.com/AnRB5IYBdhLWcg3wz6UK - WildCrustacean
不,这不是重复的,并且这个问题与链接中的问题非常不同。 - Adeem
1个回答

2
在AppDomain类中有一个AssemblyLoad事件,这可能是你在寻找的内容。
    private void SomeMethod() {
        AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad);
    }
    void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args) {
        // Code to initialize here...
    }

谢谢Steve,非常好的回答,但是"SomeMethod"应该在哪里编写呢?因为我在.dll程序集中有将近20个类。 - Adeem
很遗憾,您无法将代码放在程序集本身中,因为根据定义,如果您在程序集中运行代码,则该程序集已经加载并且事件已经触发。我不确定您的要求是什么:您的库是静态加载还是动态加载;也就是说,人们通常会引用您的库还是使用Assembly.Load方法?我不熟悉Java,我怀疑AppDomain.AssemblyLoad事件是您所描述的最接近的内容,但可能存在重大差异。 - Steve Ellinger
这不是一个静态库,而是一个共享库,许多项目将通过引用它来使用此库。是的,我理解我们不能在汇编中编写代码,但我认为也许我们可以继承一些接口或编写一些部分类来实现。 - Adeem
1
将事件订阅的最佳位置放在应用程序的Main方法中,作为该方法中第一行代码。在由VS生成的C#项目中,Main方法通常位于Program.cs文件中。 - Steve Ellinger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接