我有一个基于控制台的MEF应用程序,主机(CompositionContainer
)根据命令行参数加载可用的插件程序集,例如:
app.exe plugin1
将加载主机(app.exe)和plugin1。 VS解决方案的结构使得每个插件都有自己的项目(因此它是自己的程序集)。
存在一组插件,其中一些插件可以重用代码。因此,例如plugin1
有一个方法CopyFiles(string fileName)
,plugin2
将使用相同的功能。
现在,在传统的控制台应用程序中,可以添加对plugin1.dll
的引用,并通过使用该命名空间来实现它的重用业务。
我很好奇是否有“MEF”方式,如果你愿意的话,实现这种重复使用。因此,通过向plugin1
可导出界面添加plugin2
属性并让MEF处理其余内容,可以在Import
中创建plugin1's
对象。那可能吗?如果是这样,怎么样?
或者在设计此类应用程序时应采取更好的方法吗?奖励伏都教任何有用的学习资源和解释的指针。
谢谢!
答案 0 :(得分:2)
如果您要分享的方法位于plugin1
,则可以Export
plugin1
。如果您只是想分享该方法,也可以Export
方法。
plugin2
会Import
插件1。 MEF将负责其余部分。如果您从命令行获取程序集并为AssemblyCatalog
创建plugin1
,那么您还需要告诉它plugin2
并将其转换为AggregateCatalog
,或者将它们全部放在目录中并使用DirectoryCatalog
(您可以在命令行上传递目录名称)。
MEF Programming Guide涵盖了类似的情况。
Visual Studio 2010 and .NET Framework 4 Training Kit中还有MEF动手实验,这对我们很有用。