是否应使用Managed Extensibility Framework来使用外部插件?

时间:2010-09-30 08:00:19

标签: c# design-patterns plugins mef

我想我得到了MEF模型。但是我很难看到它是否适合我正在尝试做的事情。

我有一个应用程序会调用第三方插件来进行一些视频处理。该插件可以是FFMPEG.exe或x264.exe,无所谓。调用插件的过程是通过ProcessStartInfo(基本上通过命令行)并传递一堆参数。 e.g

ffmpeg.exe -in "c:\vid.avi"  -out "c:\vid.avi" -Xheight 100 -Xwidth 100
or 
x264.exe -in "c:\vid.avi"  -out "c:\vid.avi" -Yheight 100 -Ywidth 100

给定每个插件都有自己的参数集,因此使用MEF是否合适,因此无论使用哪个插件(通过公共合同,都可以)接口相同?如果是这样,我是否必须为实现合同的每个插件编写一个包装类?

这是使用MEF的正确方法吗?一方面,我试图通过允许客户选择他们的插件来使我的应用程序可扩展。但实际上我不确定MEF是否过度,只是使用配置文件存储命令是一种更好的方法?

3 个答案:

答案 0 :(得分:1)

如果你有可能只使用配置文件,那么这将是更好的选择。它允许添加或更改插件而无需重新编译。此外,这将为用户提供调整插件的机会。

答案 1 :(得分:1)

MEF是向应用程序添加可扩展性的好方法。您只需在应用程序中定义接口,在外部组件中实现该接口,并将Export属性添加到实现中。在应用程序中使用Import Attribute可以发现外部组件。有关详细信息,请参阅the documentation。如果您阅读此内容,则可以在不到2小时的时间内使用MEF运行应用程序。

回到主题:如果你只是用不同的参数调用不同的应用程序,我不会去MEF因为它有点矫枉过正。但是,使用MEF很有趣,如果您想进行一些实验,您仍然可以将它用于您的应用程序,仅用于学习体验。

答案 2 :(得分:0)

听起来像MEF对你想要的东西来说可能有些过分。您的插件已经是外部应用程序,您已经有办法调用它们。写包装似乎更多的工作!

相关问题