首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MEF2导入的好例子

MEF2导入的好例子
EN

Stack Overflow用户
提问于 2013-02-22 17:20:51
回答 1查看 2.5K关注 0票数 0

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

以前,我只使用ImportMany( the (Mytype))拥有一个数组属性,并使用CompositionInitializer.SatisfyImports(this)使导入工作,但现在我遇到了两个问题:

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2013-02-24 02:53:54

( 1)出口在不同的参考组件中;

正如您所说的,您将需要AggregateCatalog来聚合许多目录。通常,对于包含一个部件(导出/导入)的每个程序集,您需要一个目录。这意味着您必须对每个加载的程序集使用AssemblyCatalog类。可以通过它们包含的类型之一访问加载的程序集。下面是一个小示例,它将两个AssemblyCatalogs添加到AggregateCatalog中。

代码语言:javascript
复制
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中。

这只能在Silverlight上使用。在WPF上,您必须创建一个CompositionContainer并使用它的SatisfyImports方法。

代码语言:javascript
复制
CompositionContainer container = new CompositionContainer(catalog);
container.SatisfyImports(someObjectWithImports);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15029802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档