Могу ли я использовать UnityContainer в коде кода View, когда я хочу написать хорошую программу MVVM?Можно ли использовать UnityCOntainer в коде кода View? (MVVM)
this.DataContext = uc.Resolve<MainViewModel>();
Могу ли я использовать UnityContainer в коде кода View, когда я хочу написать хорошую программу MVVM?Можно ли использовать UnityCOntainer в коде кода View? (MVVM)
this.DataContext = uc.Resolve<MainViewModel>();
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.
очень полезно, thx! – Arvangen
Если вы спрашиваете, можете ли вы, да.
Если вы спрашиваете, хотите ли вы, ответ по-прежнему есть.
Хотя я согласен, я бы рекомендовал использовать ServiceLocator таким образом, чтобы вам не нужно было проходить контейнер по всему месту. – cadrell0
Несомненно, лучшим способом было бы использовать инъекцию конструктора, так как представление не должно действительно ссылаться на контейнер единства в шаблоне MVVM? –
Да, вы можете. Есть ли еще более глубокий вопрос? Вы пытались сделать это и получить сообщение об ошибке? Вы спрашиваете о лучших практиках? – cadrell0
Это было все, что я хочу знать сейчас :) Но если вы уже здесь, то какова наилучшая практика для установки вида DataContext? – Arvangen