MEF2进口的好例子

  • 本文关键字:MEF2 c# mef mef2
  • 更新时间 :
  • 英文 :


我以前使用过MEF,但现在在新的实现中遇到了问题。我正在导出从基类继承的对象,该基类具有[IinheritedExport]属性,并试图将它们导入。

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

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

我正试图创建一个AggregateCatalog来解决问题#1,但不知道该从哪里着手。

最后,如果有人能帮助我提出整体解决方案,我将尝试导入一个可以供整个WPF应用程序使用的集合。

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));

有关目录的更多信息,您可以阅读这篇小文章。

2) 中较新的MEF中似乎不存在CompositionInitializer4.5框架。

这仅在Silverlight上可用。在WPF上,您必须创建一个CompositionContainer并使用其SatisfyImports方法。

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

相关内容

  • 没有找到相关文章

最新更新