使用MEF加载单个加载项

时间:2013-08-27 20:22:34

标签: c# mef

我正在尝试使用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方法而不在已加载的加载项上调用它?

1 个答案:

答案 0 :(得分:1)

在我看来,您正在寻找的内容已在Prism library中实施。具体来说,您应该查看其modularity documentation和演示。

Prism可以管理您的加载项(Prism术语中的模块),并允许您立即或按需加载它们。加载模块时,会调用其Initialize方法(由每个模块通过IModule接口实现),因此不会有任何冗余初始化调用。

我还应该提到Prism支持开箱即用的MEF。