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

本文关键字:插件 唯一 MEF 何确保 确保 | 更新日期: 2023-09-27 18:17:58

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

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

除了将文件名附加到插件全名(例如fileName.assemblyName.pluginName)之外,我看不到这样做的方法,但是,我找不到任何特定程序集的文件名。目录中的所有字段引用的文件名似乎并不改变如果文件名更改(我测试通过一份plugin.dll plugin_2.dll和命名,目录报道plugin.dll所有进口的文件名称,在Assemblies[n] CodeBase和其他领域)我能找到的唯一地方文件的实际名称在Assemblies.LoadedFiles[]但我不知道如何把这插件加载文件。

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

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

最简单的方法可能是使用导出元数据,并让每个插件为其插件提供唯一标识符(例如GUID) -然后只需检查元数据即可。

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

获取程序集位置