繁体   English   中英

如何创建将在子目录中搜索插件的DirectoryCatalog

[英]How to create a DirectoryCatalog that will search sub directories for plugins

所以我的目录目录设置如下:

DirectoryCatalog directoryCatalog = new DirectoryCatalog(@".\Plugins");
var catalog = new AggregateCatalog(directoryCatalog);
var container = new CompositionContainer(catalog);
container.ComposeParts(this);

哪个会在我的Plugins文件夹中找到符合我的导入条件的.dll。 现在为了防止插件中的引用冲突,我想将每个插件放在一个单独的文件夹中。

例如

插件 - > Plugin1 - > plugin1.dll

  -> Plugin2 -> plugin2.dll 

但我的DirectoryCatalog没有找到这些插件。 是否可以实现这一点,或者我的插件库必须在指定的.\\Plugins文件夹中

您可以通过向AggregateCatalog.Catalogs属性添加多个DirectoryCatalogs来解决您的问题,如下所示:

var catalog = new AggregateCatalog();
// iterate over all directories in .\Plugins dir and add all Plugin* dirs to catalogs
foreach (var path in Directory.EnumerateDirectories(@".\Plugins", "Plugin*", SearchOption.TopDirectoryOnly))
{
    catalog.Catalogs.Add(new DirectoryCatalog(path));
}

_container = new CompositionContainer(catalog);
this._container.ComposeParts(this);

还有这个: https//github.com/MefContrib/MefContrib/blob/master/src/MefContrib/Hosting/RecursiveDirectoryCatalog.cs

我发现我需要包装_aggregateCatalog.Catalogs.Add(catalog); Initialize(...)使用一个try / catch for ReflectionTypeLoadException来阻止它在找到非插件dll时抛出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM