0

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

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

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

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

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

4

1 回答 1

1

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

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

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

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

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

这仅适用于SilverlightWPF你必须创建一个CompositionContainer并使用它的方法SatisfyImports

CompositionContainer container = new CompositionContainer(catalog);
container.SatisfyImports(someObjectWithImports);
于 2013-02-24T02:53:54.303 回答