【问题标题】:MEF: What if I have multiple exports but need only one import?MEF:如果我有多个出口但只需要一个进口怎么办?
【发布时间】:2009-12-09 19:00:11
【问题描述】:

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

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

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

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

提前感谢您的回答。

【问题讨论】:

    标签: c# .net mef


    【解决方案1】:

    请参阅this blog post 了解有关此问题的讨论以及您拥有的一些选项。此外,Glenn Block 有一篇博客文章描述了如何customize the container behavior with defaults

    【讨论】:

    • Glenn 关于 ExportProviders 的帖子给了我一个好主意。也许我应该创建一个 ExportProvider 来接受某种可以指定默认导出的配置。
    • 这完全合理,也是我们考虑的场景之一。
    【解决方案2】:

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

    1. 将您的导入更改为使用[ImportMany]。在运行时决定将哪些 Imports 用于您的合同,可能只是选择第一个,或者随机选择一个。
    2. [ImportMany]Metadata 结合使用以确定要使用哪个导入。

    【讨论】:

    • 这是个好主意,但是,我更愿意在 Windsor 中做一些事情,从配置中指定具体实现,并告诉 MEF 使用它。
    • @Venemo:你应该能够做到这一点,在运行时使用元数据。
    猜你喜欢
    • 2013-10-26
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多