我正在尝试使用 MEF 加载单个加载项。我的场景如下:当我的应用程序启动时,它会搜索一组加载项并将它们加载到我的应用程序中。
在这个启动阶段之后,我希望用户能够加载他们选择的加载项。这是我真正挣扎的一点。
我的初始加载代码如下:
var compositionContainer = new CompositionContainer();
var assemblyCatalog = new AssemblyCatalog(@"C:\MyPath\Experiment.dll");
.. catalogs for other addins..
var aggregateCatalog = new AggregateCatalog(assemblyCatalog);
CompositionContainer container = new CompositionContainer(aggregateCatalog);
container.ComposeParts(this);
foreach (var addin in addins)
{
addin.OnLoad(this);
}
我觉得我应该能够将新加载项添加到现有容器中的目录中,但我找不到任何添加它的方法。以下不起作用:
var assemblyCatalog = new AssemblyCatalog(filePath);
var catalog = this.compositionContainer.Catalog as AggregateCatalog;
catalog.Catalogs.Add(assemblyCatalog);
this.compositionContainer.ComposeParts(this);
如何加载filePath的 dll 中的加载项。此外,有什么方法可以在新加载项上调用 .OnLoad 方法,而无需在已加载的加载项上调用它?