如何确保MEF插件的唯一名称

时间:2015-10-16 15:56:02

标签: c# .net mef

我正在使用DirectoryCatalog()[ImportMany]从多个程序集中导入多个相同类型的插件。将向用户呈现所有可用插件的列表以供选择。

导出程序集将由第三方开发,因此必须保证导入的插件的名称是唯一的。

除了将文件名附加到插件全名(例如fileName.assemblyName.pluginName)之外,我看不到这样做的方法,但是,我无法在任何地方找到特定程序集的文件名。如果文件名发生更改,目录中所有具有文件名引用的字段似乎都不会更改(我通过复制plugin.dll并将其命名为plugin_2.dll进行了测试,目录报告为{ {1}}作为所有导入的文件名,位于plugin.dllAssemblies[n]和其他字段中}我唯一可以找到文件实际名称的地方是CodeBase但是我不知道如何将哪个插件关联到哪个加载文件。

如果有办法获取文件名,或者有另一种方法可以保证唯一的插件名称,请告诉我。

1 个答案:

答案 0 :(得分:1)

最简单的事情可能是使用export metadata并让每个插件为其插件提供唯一标识符(例如GUID) - 然后只需要检查元数据。

根据您的具体情况,您甚至可以在不使用导出元数据的情况下获取此信息。例如,如果您要导入IPlugin个实例,并且您知道每个具体实现都将在插件程序集中实现,则可以通过调用myPlugin.GetType().Assembly.Location来导入插件并获取程序集位置

相关问题