2013-08-27 67 views
1

我正嘗試使用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); 

我如何可以加載加載項是在DLL的文件路徑。此外,有沒有什麼辦法可以在新加載項上調用.OnLoad方法,而不必在已加載的方法上調用它?

回答

1

這聽起來像你想找的東西已經在Prism library實施。具體來說,你應該看看它的modularity documentation和演示。

棱鏡可以管理您的加載項(棱鏡模塊中的模塊),並允許您立即或按需加載它們。加載模塊時,會調用其Initialize方法(由每個模塊通過接口IModule實現),因此不會有任何冗餘初始化調用。

我還應該提到Prism支持MEF開箱即用。

+0

謝謝阿迪。該演示應用程序非常出色,絕對是我正在尋找的功能。 –