为什么在存在 MEF 时使用服务定位器

本文关键字:服务 定位器 存在 MEF 为什么 | 更新日期: 2023-09-27 17:56:21

我开始学习Prism后一直在思考一个问题......如果我们有MEF来满足所需的所有进口,为什么我们需要使用Service locator

MEF 的通用服务定位器链接

我不明白如果两者共存,它有什么用。

它是否允许Attributeless Imports(我相信必须使用导出来完成导出)??

我还在公共服务定位器上阅读了此链接,但如果它们共存,如果机器人,我并没有完全了解 senario 的用法。

对此注册的任何帮助都将有所帮助... :)

为什么在存在 MEF 时使用服务定位器

有依赖关系注入和服务定位器模式。这两种模式都可以与 MEF 一起使用。使用 [Import][ImportingConstructor] 时,您使用的是依赖注入。另一方面,当你的代码中有这样的东西时:

var someObject = exportProvider.GetExportedValue<ISomeType>();

您正在使用服务位置。

你可以选择,哪一个更适合你。实际上,实际应用程序通常会混合这两种模式。

AFAIK,Prism至少为引导程序使用服务位置,但Prism不直接使用任何DI框架,因为它希望独立于特定的DI框架(默认情况下有MEF和Unity支持)。这就是为什么Prism使用适配器进行DI/服务定位 - 它们只是另一个抽象层次。