1
正如this後的回答,我可以使用此代碼獲取使用目錄/容器的插件。獲取多個MEF目錄/容器
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(@"./")); // or different directory
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
當我需要多個插件時,這段代碼是如何修改的?例如,如果我有兩個插件:一個用於使用接口Icolor獲取顏色,另一個用於使用接口Isize的大小,我怎麼能區分這兩個插件?
我可以想到有兩個不同的顏色和大小目錄,但我不認爲這是一個通用的解決方案。
// get catalog and container
AggregateCatalog catalogForColor = new AggregateCatalog();
catalogForColor.Catalogs.Add(new DirectoryCatalog(@"/pluginForColorDirectory"));
var containerForColor = new CompositionContainer(catalogForColor);
containerForColor.ComposeParts(this);
AggregateCatalog catalogForSize = new AggregateCatalog();
catalogForSize.Catalogs.Add(new DirectoryCatalog(@"/pluginForSizeDirectory"));
var catalogForSize = new CompositionContainer(catalogForSize);
catalogForSize.ComposeParts(this);
// the property to store the catalog
public IEnumerable<Lazy<Icolor, IMessageSenderMetadata>> Color { get; set; }
public IEnumerable<Lazy<Isize, IMessageSenderMetadata>> Size { get; set; }
也許我錯過了一些東西,但我並不真正瞭解這個問題。目錄可以保存多個相同或不同類型的插件。所以你根本不需要修改上面的代碼。 – Wolfgang