在我开始学习Prism
之后,我一直在思考一个问题...如果我们Service locator
有MEF
来满足所有需要的导入,我们为什么需要使用Attributeless
。 / p>
Common Service Locator link for MEF
如果两者并存,我无法理解它的目的是什么。
是否允许Imports
{{1}}(我相信导出必须使用导出完成)??
我还阅读了常见服务定位器上的this链接,但如果它们共存,则没有完全获得使用情况。
对此regad的任何帮助都会有所帮助...... :)
答案 0 :(得分:3)
有dependency injection和service locator模式。两种模式都可以与MEF一起使用。使用[Import]
或[ImportingConstructor]
时,您正在使用依赖注入。另一方面,当你的代码中有这样的东西时:
var someObject = exportProvider.GetExportedValue<ISomeType>();
您正在使用服务地点。
您可以选择哪一个更适合您。 实际上,真正的应用程序通常会混合使用这两种模式。
AFAIK,Prism至少为引导程序使用服务位置,但Prism不直接使用任何DI框架,因为它希望独立于特定的DI框架(默认情况下有MEF和Unity支持)。这就是Prism使用适配器进行DI /服务定位的原因 - 它们只是另一个抽象层次。