MEF:如果我有多个出口但只需要一次导入怎么办?

Ven*_*emo 13 .net c# mef

我想把我的思绪包裹在MEF周围.有一点我不明白.

假设我有一个名为ISomething的接口,它是一个契约,我在包含我的应用程序的文件夹中有多个程序集,我不知道它们中有多少ISomething实现,或者哪一个包含一个.

如果我创建一个我使用MEF的主机应用程序,并希望得到一个ISomething,但只有一个,MEF如何决定它将给我哪个实现?

或者,与常见的IoC容器类似,如何告诉它应该使用哪个实现?

提前感谢您的回答.

Dan*_*ted 14

有关问题的讨论以及您拥有的一些选项,请参阅此博客文章.此外,Glenn Block有一篇博客文章描述了如何使用默认值自定义容器行为.


Ree*_*sey 11

对于MEF,如果您有许多将满足Import的Export,您有两个选择:

  1. 更改您的导入使用[ImportMany].在运行时确定要用于合同的哪个Imports,可能只是选择第一个,或随机选择一个.
  2. 使用[ImportMany]会同元数据,以便决定使用哪个导入.