我正试着围绕着MEF。 有一点我不明白。
假设我有一个名为ISomething的接口,这是一个契约,我在包含我的应用程序的文件夹中有多个程序集,我不知道它们中有多少个ISomething实现,或者哪个包含之一。
如果我创建一个我使用MEF的主机应用程序,并希望得到一个ISomething,但只有一个,MEF如何决定它将给我哪个实现?
或者,与常见的IoC容器类似,如何告诉它应该使用哪个实现?
提前感谢您的回答。
答案 0 :(得分:14)
有关此问题的讨论以及您拥有的一些选项,请参阅this blog post。另外,Glenn Block有一篇博客文章描述了如何customize the container behavior with defaults。
答案 1 :(得分:11)
对于MEF,如果您有许多将满足导入的导出,您有两个选择:
[ImportMany]
。在运行时确定要用于合同的哪个Imports,可能只是选择第一个,或随机选择一个。[ImportMany]
与Metadata结合使用,以决定使用哪种导入。