之间的异同:ViewModelLocator、ServiceLocator、Dependency Injection
Differences and similarities between: ViewModelLocator, ServiceLocator, Dependency Injection
我对以下模式感到困惑:ViewModelLocator
、ServiceLocator
、Dependency Injection
。
最新结论如下:
ViewModelLocator
。连接View
和ViewModel
的地方。
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
也不好。但是如何连接 View
和 ViewModel
呢? 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?
不,根本不应该有服务定位器。这就是我的意思的一个例子。该代码库似乎不是了解依赖注入的好方法。它产生的混乱多于洞察力。
我对以下模式感到困惑:ViewModelLocator
、ServiceLocator
、Dependency Injection
。
最新结论如下:
ViewModelLocator
。连接View
和ViewModel
的地方。
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
也不好。但是如何连接 View
和 ViewModel
呢? ServiceLocator
只需要存储服务?如您所知,所有的困惑都来自 ServiceLocator
.
您能解释一下这些元素之间的异同吗?最终唯一地识别并正确使用它们。感谢您的帮助。
你 ViewModelLocator
等源自你链接到那里的示例代码库。从我目前展示的代码示例中收集到的信息来看,该代码库似乎并不是使用依赖注入的最佳示例。
因此,任何涉及解释该代码库中的 'patterns' 的问题都应通过响应 mu 来满足。
这个问题暗示了一个错误的前提。前提是可以从该代码库中学到一些东西。可能不是这样。
服务定位器不是一种模式; it's an anti-pattern。 (大多数人似乎都同意我的看法,到目前为止还没有人能够提出令人信服的反驳。)
依赖注入不是一种模式;它是一组设计原则和(几个)模式。这就是我们在 our book.
中试图描述的内容how then to connected
View
andViewModel
?
我认为,对 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?
不,根本不应该有服务定位器。这就是我的意思的一个例子。该代码库似乎不是了解依赖注入的好方法。它产生的混乱多于洞察力。