Могу ли я использовать UnityCOntainer в коде View?(MVVM) - PullRequest
0 голосов
/ 26 марта 2012

Могу ли я использовать UnityContainer в коде View, когда я хочу написать хорошую программу MVVM?

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

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Если вы спрашиваете, можете ли вы, да.

Если вы спрашиваете, следует ли вам, ответ все равно да.

1 голос
/ 30 марта 2012

ServiceLocator - это анти-шаблон, вы не должны его использовать. Причина, по которой это анти-шаблон, заключается в том, что он позволяет в любое время разрешать объекты внутри класса, снижая полезность вашего DI и делая ваш код более сложным для модульного тестирования.

Я предлагаю сделать одно из следующего:

a) Внедрить модель представления в представление через его конструктор. Разрешите представление, используя Unity, чтобы оно разрешало все зависимости представлений (модель представления) для вас.

Итак:

публичный частичный класс View: UserControl, IViewFoo { публичный вид (IViewModel viewModel) { DataContext = ViewModel; }

var view = _container.Resolve (); }

б)

Используйте вложенное свойство, чтобы внедрить модель представления в DataContext для вас. MEFEDMVVM и MVVMLite оба делают это (ищите их в Codeplex)

с) Следуйте подходу, основанному на соглашениях, где viewmodel присваивается представлению на основе того, что у него есть совместимые имена (MainView.cs и MainViewModel.cs). Caliburn Micro делает это и очень приятен в использовании. Это также можно найти в CodePlex.

...