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

mmc*_*ole 21 .net plugins design-patterns

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

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

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

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


编辑:

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

Mat*_*ton 9

根据对类似问题的响应,查看System.AddIn命名空间.


Jer*_*ark 5

微软的Glenn Block和Brad Abrams最近发布了Managed Extensibility Framework,它提供了一个框架,用于处理您正在谈论的内容.

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

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


Kev*_*Day 5

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