MVVMLight中IoC容器的好处

mca*_*mca 2 c# wpf ioc-container mvvm mvvm-light

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

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

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

</UserControl>
Run Code Online (Sandbox Code Playgroud)

Gay*_*Fow 5

在Xaml中实例化视图模型绝对没问题,但有几件事需要考虑...

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

对于想要使用MVVM的小型一次性WPF应用程序,Xaml方法很好; 但随着应用程序的成熟,最终将需要一种更加工业化的方法.这就是IoC容器必不可少的地方.