21

为您的应用程序允许和实现插件系统的标准方法是什么?

在我的上一个应用程序中,我为它们必须实现的所有插件创建了一个简单的接口。然后,我将所有程序集加载到应用程序目录中,并丢弃任何未实现该接口的程序集。

接口中的方法之一是 DoWork() 方法,该方法会定期在所有加载的程序集上调用,以执行插件可能具有的任何操作。

做插件系统的“正确”方法是什么?你只是为插件创建一个接口吗?您是否应该定期在所有插件中调用特定方法?有没有更高级的方法?


编辑:

感谢 Matt Hamilton 对 System.Addin 命名空间的引用。这很可能是我实现插件的方式。但是,总的来说,我仍然对插件架构感到好奇,并且不介意关于它们应该设计、实现的最佳方式的一些背景知识……一旦加载,你应该如何调用它们等等。

4

3 回答 3

9

根据对类似问题的回复,查看 System.AddIn 命名空间。

于 2008-10-07T03:37:59.320 回答
5

Microsoft 的 Glenn Block 和 Brad Abrams 最近发布了托管可扩展性框架,它提供了一个框架来处理您正在谈论的内容。

文档和下载可在此处获得。

GlennBrad 的博客也是 MEF 的重要资源。

于 2008-10-07T04:16:37.747 回答
4

从严格的设计模式角度来看,您可能想看看OSGi(这是高度面向 Java 的,但被认为是一个非常非常好的插件/模块系统)。对于您要实现的目标可能有点过头了,但是那里有很多关于如何在运行过程中动态处理加载和卸载模块等非常好的东西......

于 2008-10-07T04:30:36.953 回答