我有一个基于控制台的MEF应用程序,主机(CompositionContainer
)根据命令行参数加载可用的插件程序集,例如:
app.exe plugin1
将加载主机(app.exe)和plugin1。VS解决方案的结构使得每个插件都有自己的项目(因此它有自己的汇编)。
存在一组插件,其中一些有重用代码的机会。例如,plugin1
有一个方法CopyFiles(string fileName)
,同样的功能将被plugin2
利用。
现在,在传统的控制台应用程序中,可以添加对plugin1.dll
的引用,并通过使用该名称空间进行重用。
我很好奇是否有一种"MEF"的方式,如果你愿意的话,实现这种重用。因此,通过向plugin1's
可导出接口添加Import
属性并让MEF处理其余部分,可以在plugin2
中创建plugin1
对象。这可能吗?如果有,是怎么做到的?
或者在设计这样的应用程序时是否应该采用更好的方法?任何有用的学习资源和解释的指针都是额外的巫术。
谢谢!
如果您想要共享的方法在plugin1
中,您将Export
plugin1
。如果你只是想共享一个方法,你也可以Export
。
plugin2
将Import
plugin1。MEF会处理剩下的事。如果您从命令行获取程序集并为plugin1
创建AssemblyCatalog
,那么您还需要告诉它plugin2
并将其放入AggregateCatalog
,或者将它们全部放在目录中并使用DirectoryCatalog
(您可以在命令行上传递目录名称)。
MEF编程指南涵盖了类似的场景。
在Visual Studio 2010和。net Framework 4 Training Kit中也有关于MEF的Hands-On-Labs,这很有帮助。