2015-10-16 28 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