2012-03-26 2 views
0

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

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

Да, вы можете. Есть ли еще более глубокий вопрос? Вы пытались сделать это и получить сообщение об ошибке? Вы спрашиваете о лучших практиках? – cadrell0

+0

Это было все, что я хочу знать сейчас :) Но если вы уже здесь, то какова наилучшая практика для установки вида DataContext? – Arvangen

ответ

1

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

Мое предложение было бы сделать одно из следующих действий:

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

Итак:

общественный частичный класс Вид: UserControl, IViewFoo { общественное мнение (IViewModel ViewModel) { DataContext = ViewModel; }

var view = _container.Resolve(); }

б)

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

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

+0

очень полезно, thx! – Arvangen

2

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

Если вы спрашиваете, хотите ли вы, ответ по-прежнему есть.

+0

Хотя я согласен, я бы рекомендовал использовать ServiceLocator таким образом, чтобы вам не нужно было проходить контейнер по всему месту. – cadrell0

+0

Несомненно, лучшим способом было бы использовать инъекцию конструктора, так как представление не должно действительно ссылаться на контейнер единства в шаблоне MVVM? –

Смежные вопросы