开始学习后一直在思考一个问题Prism
...为什么我们需要使用 Service locator
如果我们有 MEF
以满足所有需要的导入。
Common Service Locator link for MEF
我不明白如果这两者共存有什么用。
是否允许 Attributeless
Imports
(我相信导出必须使用 Exports 来完成)??
我还阅读了 this公共(public)服务定位器上的链接,但如果机器人共存,则没有完全了解使用情况。
有关此 regads 的任何帮助都会有所帮助...:)
最佳答案
有dependency injection和 service locator模式。两种模式都可以与 MEF 一起使用。使用 [Import]
或 [ImportingConstructor]
时,您正在使用依赖注入(inject)。另一方面,当您的代码中有这样的内容时:
var someObject = exportProvider.GetExportedValue<ISomeType>();
您正在使用服务位置。
你可以选择,哪一个更适合你。 实际上,实际应用程序经常混合使用这两种模式。
据我所知,Prism 至少为 Bootstrap 使用服务位置,但 Prism 不直接使用任何 DI 框架,因为它希望独立于特定的 DI 框架(默认情况下支持 MEF 和 Unity)。这就是 Prism 使用适配器进行 DI/服务定位的原因——它们只是另一个抽象级别。
关于c# - 为什么在存在 MEF 时使用 ServiceLocator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14576454/