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