之间的异同:ViewModelLocator、ServiceLocator、Dependency Injection

Differences and similarities between: ViewModelLocator, ServiceLocator, Dependency Injection

我对以下模式感到困惑:ViewModelLocatorServiceLocatorDependency Injection

最新结论如下:

ViewModelLocator。连接ViewViewModel的地方。

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;

依赖注入。弱连接的一组原则。经常通过构造函数。

private readonly INavigationService _navigation;

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

ServiceLocator。它是什么?与 ViewModelLocator 相同,但被许多人认为是反模式?结果 ViewModelLocator 也不好。但是如何连接 ViewViewModel 呢? ServiceLocator 只需要存储服务?如您所知,所有的困惑都来自 ServiceLocator.

您能解释一下这些元素之间的异同吗?最终唯一地识别并正确使用它们。感谢您的帮助。

,从中我推断 ViewModelLocator 等源自你链接到那里的示例代码库。从我目前展示的代码示例中收集到的信息来看,该代码库似乎并不是使用依赖注入的最佳示例。

因此,任何涉及解释该代码库中的 'patterns' 的问题都应通过响应 mu 来满足。

这个问题暗示了一个错误的前提。前提是可以从该代码库中学到一些东西。可能不是这样。

服务定位器不是一种模式; it's an anti-pattern。 (大多数人似乎都同意我的看法,到目前为止还没有人能够提出令人信服的反驳。)

依赖注入不是一种模式;它是一组设计原则和(几个)模式。这就是我们在 our book.

中试图描述的内容

how then to connected View and ViewModel?

我认为,对 MVVM 模式的最佳解释仍然是 Josh Smith's original article. If you want to see a complete code example that combines MVVM and Dependency Injection, it's available with the first edition of Dependency Injection in .NET(新版本中也包含免费电子书)。

ServiceLocator only needs to store Services?

不,根本不应该有服务定位器。这就是我的意思的一个例子。该代码库似乎不是了解依赖注入的好方法。它产生的混乱多于洞察力。