Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVVMLight中IoC容器的优点_C#_Wpf_Mvvm_Mvvm Light_Ioc Container - Fatal编程技术网

C# MVVMLight中IoC容器的优点

C# MVVMLight中IoC容器的优点,c#,wpf,mvvm,mvvm-light,ioc-container,C#,Wpf,Mvvm,Mvvm Light,Ioc Container,MVVM光中IoC容器的好处是什么?ViewModelLocator有什么好处?为什么不直接在XAML文件中实例化视图模型,如下所示 <UserControl> <UserControl.DataContext> <vm:MainViewModel/> </UserControl.DataContext> <!-- Other user control elements here --> &l

MVVM光中IoC容器的好处是什么?ViewModelLocator有什么好处?为什么不直接在XAML文件中实例化视图模型,如下所示

<UserControl>
    <UserControl.DataContext>
        <vm:MainViewModel/>
    </UserControl.DataContext>

    <!-- Other user control elements here -->

</UserControl>

在Xaml中实例化视图模型是绝对好的,但是有一些事情需要考虑

  • 当您对视图模型使用Xaml时,在主窗口的
    InitializeComponent
    方法期间会调用VM构造函数。这意味着虚拟机将在UI线程上创建。有些开发人员喜欢这样,有些则不喜欢
  • 此外,当您使用Xaml时,它就像是对VM进行“硬编码”,这就克服了在大型复合应用程序中扮演不可或缺角色的后期绑定和模块发现
  • 与前一点有点相关,一些团队喜欢将所有内容解耦,并使用配置文件来告诉应该实例化哪个vm。如果您想进行隔离测试,这种方法尤其有用

对于希望使用MVVM的小型一次性WPF应用程序,Xaml方法很好;但随着应用程序的成熟,最终需要一种更具行业实力的方法。这就是IoC容器的重要性所在。

听起来像:请给我解释一下IoC容器和ViewModelLocator。请添加有关您的比较的更多信息。x而不是y的好处有可能得到答案。正如我已经解释过的,我可以直接在XAML中实例化视图模型,就像上面截取的代码一样。为什么我应该使用ViewModelLocator和IoC呢?好处是什么?