如何确保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[]
但我不知道如何把这插件加载文件。
如果有一种方法可以获得文件名,或者如果有另一种方法可以保证唯一的插件名称,请告诉我。
最简单的方法可能是使用导出元数据,并让每个插件为其插件提供唯一标识符(例如GUID) -然后只需检查元数据即可。
根据具体情况,您甚至可以在不使用导出元数据的情况下获得此信息。例如,如果你要导入IPlugin
实例并且你知道每个具体实现都将在插件程序集中实现,你可以导入插件并通过调用myPlugin.GetType().Assembly.Location