通过MEF利用plugin2中plugin1中可用的方法

aat*_*que 6 .net c# mef

我有一个基于控制台的MEF应用程序,其host(CompositionContainer)基于命令行参数加载可用的插件程序集,例如:

app.exe plugin1
Run Code Online (Sandbox Code Playgroud)

将加载主机(app.exe)和plugin1.VS解决方案的结构使得每个插件都有自己的项目(因此它是自己的程序集).

存在一组插件,其中一些插件有重用代码的机会.因此,例如plugin1有一个方法,CopyFiles(string fileName)并且将使用相同的功能plugin2.

现在,在传统的控制台应用程序中,可以添加plugin1.dll对该命名空间的引用,并使用该命名空间来重新使用它.

我很好奇是否有"MEF"方式,如果你愿意的话,实现这种重复使用.因此,通过向可导出接口添加属性并让MEF处理其余部分来创建plugin1in 的对象.那可能吗?如果是这样,怎么样?plugin2Importplugin1's

或者在设计此类应用程序时是否应采取更好的方法?奖励伏都教任何有用的学习资源和解释的指针.

谢谢!

Jim*_*nts 2

如果您想要共享的方法在 中plugin1,您就会这样做Export plugin1Export如果您只是想共享该方法,也可以使用该方法。

plugin2Import插件1。MEF 会处理剩下的事情。如果您从命令行获取程序集并创建AssemblyCatalogfor plugin1,那么您还需要告诉它plugin2并将其放入 an 中AggregateCatalog,或者将它们全部放入一个目录中并使用 a DirectoryCatalog(您可以在命令中传递目录名称)线)。

MEF 编程指南涵盖了类似的场景。

Visual Studio 2010 和 .NET Framework 4 培训工具包中还有 MEF 动手实验室,这也很有帮助。