首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ViewModelLocator、ServiceLocator、依赖注入的异同

ViewModelLocator、ServiceLocator、依赖注入的异同
EN

Stack Overflow用户
提问于 2020-02-21 07:33:10
回答 1查看 242关注 0票数 1

我对模式感到困惑:ViewModelLocatorServiceLocatorDependency Injection

最新结论如下:

ViewModelLocator。连接ViewViewModel的地方。

代码语言:javascript
复制
public ViewModelLocator()
{
    SimpleIoc.Default.Register<MainViewModel>();
    SimpleIoc.Default.Register<SettingViewModel>();
}

public MainViewModel MainViewModel => SimpleIoc.Default.GetInstance<MainViewModel>();
public SettingViewModel SettingViewModel => SimpleIoc.Default.GetInstance<SettingViewModel>();

// View
private MainViewModel ViewModel => ViewModelLocator.Current.MainViewModel;

依赖注入用于弱连接的一套原则。通常通过构造函数。

代码语言:javascript
复制
private readonly INavigationService _navigation;

public ShellViewModel(INavigationService navigation)
{
    _navigation = navigation;
}

ServiceLocator。那是什么?和ViewModelLocator一样,但被许多人认为是反模式?事实证明,ViewModelLocator也是不好的。但是如何连接ViewViewModel呢?ServiceLocator只需要存储服务?正如您所理解的,所有的混乱都来自ServiceLocator

你能解释一下这些元素之间的区别和相似之处吗?以最终唯一地标识和正确使用它们。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-21 09:39:56

您是最近问了一个相关的问题,根据它,我推断ViewModelLocator等来源于您链接到的示例代码库。从我从到目前为止显示的代码示例中收集到的信息来看,代码库似乎不是使用依赖注入的最佳示例。

因此,任何涉及解释代码库中的“模式”的问题都应该由响应穆恩来解决。

这个问题意味着一个错误的前提。前提是从这个代码库中可以学到一些东西。情况可能并非如此。

服务定位器不是一种模式;这是一个反模式。(大多数人似乎都同意我的观点,到目前为止,还没有人能提出令人信服的反驳。)

依赖注入不是一种模式;它是一组设计原则和(几种)模式。这就是我们试图在我们的书中描述的。

然后如何连接ViewViewModel

我相信,对MVVM模式最好的解释仍然是乔希·史密斯的原创文章。如果您希望看到一个将MVVM和依赖项注入结合在一起的完整代码示例,则可以在.NET中依赖注入的第一版中使用它(它也包括在新版的免费电子书中)。

ServiceLocator只需要存储服务?

不,根本不应该有服务定位器。这就是我的意思。看起来,代码库并不是学习依赖注入的好方法。它会产生更多的混乱而不是洞察力。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60333996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档