Wpf 我是否可以使用视图中的UnityCOntainer';什么是代码隐藏?(MVVM)

Wpf 我是否可以使用视图中的UnityCOntainer';什么是代码隐藏?(MVVM),wpf,mvvm,unity-container,Wpf,Mvvm,Unity Container,当我想编写好的MVVM程序时,我可以使用视图的代码隐藏中的UnityContainer吗 this.DataContext = uc.Resolve<MainViewModel>(); this.DataContext=uc.Resolve(); 如果你问是否可以,请回答是的 如果你问是否应该,答案仍然是肯定的。如果你问是否可以,答案是肯定的 如果你问是否应该,答案仍然是肯定的。ServiceLocator是一种反模式,你不应该使用它。它是反模式的原因是,它允许在类内随时解析对象,

当我想编写好的MVVM程序时,我可以使用视图的代码隐藏中的UnityContainer吗

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容器??