在您的应用程序中实现插件的设计模式?

时间:2008-10-07 03:35:15

标签: .net design-patterns plugins

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

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

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

执行插件系统的“正确”方法是什么?你刚刚为插件创建了一个接口吗?你应该定期在所有插件中调用特定方法吗?有更复杂的方式吗?


编辑:

感谢Matt Hamilton对System.Addin命名空间的引用。这很可能是我实现插件的方式。但是,我仍然对插件体系结构感到好奇,并且不介意一些关于它们应该设计的最佳方式的背景,非常重要..如何在加载后调用它们等等。

4 个答案:

答案 0 :(得分:9)

根据this response查看System.AddIn命名空间中的类似问题。

答案 1 :(得分:9)

答案 2 :(得分:5)

微软的Glenn Block和Brad Abrams最近发布了Managed Extensibility Framework,它提供了一个框架来处理你所说的内容。

可以使用文档和下载here

Glenn'sBrad's博客也是MEF的绝佳资源。

答案 3 :(得分:4)

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