从运行时加载的DLL连接事件?

时间:2009-11-23 15:17:42

标签: c#

基本上我希望能够为我的应用程序编写一个dll,我将能够使用特定名称放入特定文件夹,并在运行时加载该dll并订阅特定事件。 作为一个例子,我有一个简单的Windows窗体应用程序,上面有一个按钮。我希望能够在按钮单击事件发生时显示MessageBox但我希望显示的消息由运行时加载的外部dll控制。 实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

创建一个包含至少一个处理事件的方法的接口(您的应用程序必须引用定义它的程序集):

public interface IEventHandler {
    void HandleEvent(object sender, EventArgs e);
}

在要在实现接口的运行时加载的DLL中添加一个类:

public class ConcreteEventHandler: IEventHandler {
    public void HandleEvent(object sender, EventArgs e) {
        // do something here
    }
}

在您的应用程序中,使用反射来加载dll并创建具体处理程序的实例(省略错误检查):

// The assembly name/location could be configurable
Assembly      assembly = Assembly.Load("MyAssembly.dll");
// The type name could be configurable
Type          type     = assembly.GetType("ConcreteEventHandler");
IEventHandler handler  = Activator.CreateInstance(type) as IEventHandler;

您可以将此处理程序挂钩到您想要的任何内容,例如:

MyButton.OnClick += handler.HandleEvent;

答案 1 :(得分:0)

DLL是一个众所周知的DLL还是你要加载不同的或多个?如果是后者,我建议查看.NET 3.5中的AddIn框架。

鉴于这两种选择中的任何一种,在这种情况下采用的非常好的设计模式是Observer pattern。您的“观察者”正在观看按钮点击事件(观察到的)并正确执行他们的MessageBox