所以我的目录目录设置如下:
DirectoryCatalog directoryCatalog = new DirectoryCatalog(@".\Plugins");
var catalog = new AggregateCatalog(directoryCatalog);
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
哪个会在Plugins
文件夹中找到符合我导入条件的.dll文件。现在为了防止插件中的引用冲突,我想将每个插件放在一个单独的文件夹中。
e.g。
插件 - > Plugin1 - > plugin1.dll
-> Plugin2 -> plugin2.dll
但我的DirectoryCatalog
找不到这些插件。是否可以实现此功能,或者我的插件库必须位于指定的.\Plugins
文件夹
答案 0 :(得分:12)
您可以通过将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);
属性来解决您的问题:
{{1}}
答案 1 :(得分:0)
我发现我需要将_aggregateCatalog.Catalogs.Add(catalog);
包含在Initialize(...)
下,并使用ReflectionTypeLoadException
的try / catch来阻止它在找到非插件dll时抛出。