Wpf 我是否可以使用视图中的UnityCOntainer';什么是代码隐藏?(MVVM)
当我想编写好的MVVM程序时,我可以使用视图的代码隐藏中的UnityContainer吗Wpf 我是否可以使用视图中的UnityCOntainer';什么是代码隐藏?(MVVM),wpf,mvvm,unity-container,Wpf,Mvvm,Unity Container,当我想编写好的MVVM程序时,我可以使用视图的代码隐藏中的UnityContainer吗 this.DataContext = uc.Resolve<MainViewModel>(); this.DataContext=uc.Resolve(); 如果你问是否可以,请回答是的 如果你问是否应该,答案仍然是肯定的。如果你问是否可以,答案是肯定的 如果你问是否应该,答案仍然是肯定的。ServiceLocator是一种反模式,你不应该使用它。它是反模式的原因是,它允许在类内随时解析对象,
this.DataContext = uc.Resolve<MainViewModel>();
this.DataContext=uc.Resolve();
如果你问是否可以,请回答是的
如果你问是否应该,答案仍然是肯定的。如果你问是否可以,答案是肯定的
如果你问是否应该,答案仍然是肯定的。ServiceLocator是一种反模式,你不应该使用它。它是反模式的原因是,它允许在类内随时解析对象,从而降低了DI的有用性,并使代码更难进行单元测试 我的建议是采取以下措施之一: a) 通过视图的构造函数将视图模型注入视图。使用Unity解析视图,以便它为您解析所有视图依赖项(视图模型) 因此: 公共部分类视图:UserControl,IViewFoo { 公共视图(IViewModel viewModel) { DataContext=viewModel; } var view=_container.Resolve(); } (b) 使用附加属性将viewmodel插入到DataContext中。MEFEDMVVM和MVVMLite都可以这样做(在Codeplex上查找它们) (c)
遵循基于约定的方法,其中viewmodel根据具有兼容名称(MainView.cs和MainViewModel.cs)的视图分配给视图。Caliburn Micro可以做到这一点,而且使用起来非常好。这也可以在CodePlex上找到。ServiceLocator是一种反模式,您不应该使用它。它是反模式的原因是,它允许在类内随时解析对象,从而降低了DI的有用性,并使代码更难进行单元测试 我的建议是采取以下措施之一: a) 通过视图的构造函数将视图模型注入视图。使用Unity解析视图,以便它为您解析所有视图依赖项(视图模型) 因此: 公共部分类视图:UserControl,IViewFoo { 公共视图(IViewModel viewModel) { DataContext=viewModel; } var view=_container.Resolve(); } (b) 使用附加属性将viewmodel插入到DataContext中。MEFEDMVVM和MVVMLite都可以这样做(在Codeplex上查找它们) (c)
遵循基于约定的方法,其中viewmodel根据具有兼容名称(MainView.cs和MainViewModel.cs)的视图分配给视图。Caliburn Micro可以做到这一点,而且使用起来非常好。这也可以在CodePlex上找到。是的,您可以。这里有更深层次的问题吗?你有没有试过这样做,结果出错了?你是在问最佳实践吗?这就是我现在想要知道的:)但是如果你已经在这里了,设置view DataContext的最佳实践是什么?是的,你可以。这里有更深层次的问题吗?你有没有试过这样做,结果出错了?你是在问最佳实践吗?这是我现在想知道的全部:)但是如果你已经在这里,设置view DataContext的最佳实践是什么?虽然我同意,我建议您使用ServiceLocator,这样您就不需要到处传递容器。当然,最好的方法是使用构造函数注入,因为视图不应该在MVVM模式中真正引用unity容器??尽管我同意,我建议您使用ServiceLocator,这样您就不需要到处传递容器。当然,最好的方法是使用构造函数注入,因为视图不应该在MVVM模式中真正引用unity容器??