我可以在View的代码中使用Unity COntainer吗? (MVVM)

时间:2012-03-26 17:42:37

标签: wpf mvvm unity-container

当我想编写好的MVVM程序时,我可以在View代码中使用Unity Container吗?

this.DataContext = uc.Resolve<MainViewModel>();

2 个答案:

答案 0 :(得分:2)

如果你问你是否可以,是的。

如果你问你是否应该,答案仍然是肯定的。

答案 1 :(得分:1)

ServiceLocator是一种反模式,你不应该使用它。它是反模式的原因是因为它允许在任何时候在类中解析对象,降低了DI的有用性并使代码更难以进行单元测试。

我的建议是做以下其中一项:

a)通过构造函数将viewmodel注入视图。使用Unity解析视图,以便它为您解析所有视图依赖项(视图模型)。

所以:

public partial class查看:UserControl,IViewFoo { 公共视图(IViewModel viewModel) { 的DataContext =视图模型; }

var view = _container.Resolve(); }

b)中

使用附加属性将viewmodel注入DataContext。 MEFEDMVVM和MVVMLite都这样做(在Codeplex上查找)

c)中 遵循基于约定的方法,其中视图模型基于具有兼容名称(MainView.cs和MainViewModel.cs)的视图被分配给视图。 Caliburn Micro做到了这一点并且非常好用。这也可以在CodePlex上找到。