为什么在MEF存在时使用ServiceLocator?

时间:2013-01-29 05:50:00

标签: c# mef prism-4 common-service-locator

在我开始学习Prism之后,我一直在思考一个问题...如果我们Service locatorMEF来满足所有需要的导入,我们为什么需要使用Attributeless。 / p>

Common Service Locator link for MEF

如果两者并存,我无法理解它的目的是什么。

是否允许Imports {{1}}(我相信导出必须使用导出完成)??

我还阅读了常见服务定位器上的this链接,但如果它们共存,则没有完全获得使用情况。

对此regad的任何帮助都会有所帮助...... :)

1 个答案:

答案 0 :(得分:3)

dependency injectionservice locator模式。两种模式都可以与MEF一起使用。使用[Import][ImportingConstructor]时,您正在使用依赖注入。另一方面,当你的代码中有这样的东西时:

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

您正在使用服务地点。

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

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