我对模式感到困惑: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。
你能解释一下这些元素之间的区别和相似之处吗?以最终唯一地标识和正确使用它们。谢谢你的帮助。
发布于 2020-02-21 09:39:56
您是最近问了一个相关的问题,根据它,我推断ViewModelLocator等来源于您链接到的示例代码库。从我从到目前为止显示的代码示例中收集到的信息来看,代码库似乎不是使用依赖注入的最佳示例。
因此,任何涉及解释代码库中的“模式”的问题都应该由响应穆恩来解决。
这个问题意味着一个错误的前提。前提是从这个代码库中可以学到一些东西。情况可能并非如此。
服务定位器不是一种模式;这是一个反模式。(大多数人似乎都同意我的观点,到目前为止,还没有人能提出令人信服的反驳。)
依赖注入不是一种模式;它是一组设计原则和(几种)模式。这就是我们试图在我们的书中描述的。
然后如何连接
View和ViewModel?
我相信,对MVVM模式最好的解释仍然是乔希·史密斯的原创文章。如果您希望看到一个将MVVM和依赖项注入结合在一起的完整代码示例,则可以在.NET中依赖注入的第一版中使用它(它也包括在新版的免费电子书中)。
ServiceLocator只需要存储服务?
不,根本不应该有服务定位器。这就是我的意思。看起来,代码库并不是学习依赖注入的好方法。它会产生更多的混乱而不是洞察力。
https://stackoverflow.com/questions/60333996
复制相似问题