我正在使用DirectoryCatalog()
和[ImportMany]
从多个程序集中导入多个相同类型的插件。将向用户呈现所有可用插件的列表以供选择。
导出程序集将由第三方开发,因此必须保证导入的插件的名称是唯一的。
除了将文件名附加到插件全名(例如fileName.assemblyName.pluginName
)之外,我看不到这样做的方法,但是,我无法在任何地方找到特定程序集的文件名。如果文件名发生更改,目录中所有具有文件名引用的字段似乎都不会更改(我通过复制plugin.dll
并将其命名为plugin_2.dll
进行了测试,目录报告为{ {1}}作为所有导入的文件名,位于plugin.dll
,Assemblies[n]
和其他字段中}我唯一可以找到文件实际名称的地方是CodeBase
但是我不知道如何将哪个插件关联到哪个加载文件。
如果有办法获取文件名,或者有另一种方法可以保证唯一的插件名称,请告诉我。
答案 0 :(得分:1)
最简单的事情可能是使用export metadata并让每个插件为其插件提供唯一标识符(例如GUID) - 然后只需要检查元数据。
根据您的具体情况,您甚至可以在不使用导出元数据的情况下获取此信息。例如,如果您要导入IPlugin
个实例,并且您知道每个具体实现都将在插件程序集中实现,则可以通过调用myPlugin.GetType().Assembly.Location
来导入插件并获取程序集位置