使用MEF加载单个外接程序
本文关键字:程序 单个外 加载 MEF 使用 | 更新日期: 2023-09-27 18:29:10
我正在尝试使用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);
如何加载filePathdll中的加载项。此外,有没有任何方法可以在新加载项上调用.OnLoad方法,而不在已经加载的加载项上进行调用?
在我看来,您想要的东西已经在Prism库中实现了。具体来说,您应该看看它的模块化文档和演示。
Prism可以管理您的加载项(Prism术语中的模块),并允许您立即或按需加载。加载模块时,会调用其Initialize
方法(由每个模块通过IModule
接口实现),因此不会有任何冗余的初始化调用。
我还应该提到,Prism支持开箱即用的MEF。