13

我正试图围绕 MEF 进行思考。有一件事我不明白。

假设我有一个名为 ISomething 的接口,它是一个合同,并且我在包含我的应用程序的文件夹中有多个程序集,我不知道其中有多少个 ISomething 实现,或者哪个包含一个。

如果我创建了一个使用 MEF 的主机应用程序,并且想获得一个 ISomething,但只有一个,那么 MEF 如何决定它将为我提供哪个实现?

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

提前感谢您的回答。

4

2 回答 2

14

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

于 2009-12-09T19:58:49.227 回答
11

在 MEF 的情况下,如果您有许多满足 Import 要求的 Export,您有两种选择:

  1. 将您的 Import 更改为使用[ImportMany]. 在运行时决定哪些 Imports 用于您的合同,可能只是选择第一个,或者随机选择一个。
  2. [ImportMany]元数据结合使用以确定要使用的导入。
于 2009-12-09T19:07:49.767 回答