MEF2进口的好例子

时间:2013-02-22 17:20:52

标签: c# mef mef2

之前我曾使用过MEF,但现在我遇到了更新的实现问题。我正在导出从基类继承的对象,它具有[InheritedExport]属性,并且我正在尝试导入它们。

之前,我只有[ImportMany(typeof(mytype))]的数组属性,并使用CompositionInitializer.SatisfyImports(this)来使导入工作,但现在我有两个问题:

1)导出在一个不同的引用程序集中; 2)在4.5框架中较新的MEF中似乎不存在CompositionInitializer。

我正在尝试创建一个AggregateCatalog来解决问题#1,但不知道从哪里开始。

最后,我正在尝试导入一个可供整个WPF应用程序使用的集合,如果有人可以在建议整体解决方案方面给我任何帮助。

1 个答案:

答案 0 :(得分:1)

  

1)导出位于不同的引用程序集中;

正如您所说,您需要AggregateCatalog来汇总多个目录。通常,每个包含零件的装配(导出/导入)都需要一个目录。这意味着您必须为每个加载的程序集使用AssemblyCatalog类。您可以通过它们包含的某种类型访问已加载的程序集。这是一个将一些AssemblyCatalog添加到AggregateCatalog的小例子。

AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(typeof(SomeClassInSomeAssembly).Assembly));
catalog.Catalogs.Add(new AssemblyCatalog(typeof(SomeClassInAnotherAssembly).Assembly));

有关目录的更多信息,请阅读this small article

  

2)新的MEF中似乎不存在CompositionInitializer   4.5框架。

仅适用于Silverlight。在WPF,您必须创建CompositionContainer并使用其SatisfyImports方法。

CompositionContainer container = new CompositionContainer(catalog);
container.SatisfyImports(someObjectWithImports);