2015-10-16 44 views
1

我正在使用DirectoryCatalog()[ImportMany]从多个程序集导入多个相同类型的插件。所有可用插件的列表将呈现给用户以供选择。如何确保MEF插件的唯一名称

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

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

如果有一种获取文件名的方法,或者如果有另一种方法来保证唯一的插件名称,请让我知道。

+0

导入插件并获取程序集位置。您可以将每个MEF零件放置在其自己的文件夹中,那么你不必考虑文件名冲突。 –

回答

1

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

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