我正在使用非常标准的MEF从目录中加载插件:
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(this.GetType().Assembly));
this.directoryCatalog = new DirectoryCatalog(pluginDirectory);
catalog.Catalogs.Add(directoryCatalog);
this.container = new CompositionContainer(catalog);
try
{
this.container.ComposeParts(this);
}
catch (CompositionException compositionException)
{
log.Error(compositionException);
throw;
}
catch (System.Reflection.ReflectionTypeLoadException rtle)
{
foreach (var e in rtle.LoaderExceptions)
log.Error(e);
}
在我的插件目录中,我有不公开IPlugin
界面的插件以及其他.dll文件。
我想获取成功加载的IPlugin
实现的列表以及它们来自哪个文件。
我尝试查看directoryCatalog.LoadedFiles
,但这只是列出目录中的文件,无论它们是实际的插件还是其他。
我已经查看了导出定义,但这对实现的原始文件一无所知。
答案 0 :(得分:0)
您可以通过以下方式检查已加载的插件:
[ImportMany(typeof(IPlugin))]
public IEnumerable<IPlugin> _plugins;
Plugin
的实现应标记为[Export(typeof(IPlugin))]
。之后,您将在_plugins
变量中加载插件