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

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

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

例如



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

最佳答案

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

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);

关于c# - 如何创建一个 DirectoryCatalog 来搜索插件的子目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26905630/

10-10 10:05