c# - 为什么在存在 MEF 时使用 ServiceLocator?

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

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

Common Service Locator link for MEF

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

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

我还阅读了 this公共(public)服务定位器上的链接,但如果机器人共存,则没有完全了解使用情况。

有关此 regads 的任何帮助都会有所帮助...:)

最佳答案

dependency injectionservice 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/

相关文章:

c# - 无法插入数据库 asp.net C#

.net - 托管可扩展性框架 (MEF) 与复合 UI 应用程序 block (CAB)

.net - MEF 在其他组件中找不到零件

c# - 使用 InteractionRequests 设计一个 "busy"对话框

c# - 在 C# 中读取 Facebook 提要

c# - 使用 JSON.NET 将属性反序列化为 ExpandoObject

c# - 调试错过的广播数据报,它出现在 wireshark 中,但不出现在 C# 应用程序中?

dll - 如何在 MEF 中设置 PrivateBinPath?

c# - 从 dll 文件加载 Prism 模块(在启动时)

wpf - 避免在 MVVM 中使用更胖的 View 模型