Правильный способ использования экранов вместе с МОК в Caliburn

Обновить

December 2018

Просмотры

376 раз

2

Я думал о попытке узнать Caliburn снова. Первые несколько уроков было легко, но все становится сложнее, как я прогрессировал, и я не могу понять это в одиночку.

Я разработал приложение для этой цели , чтобы охватить большую часть основы , которые имеют ShellViewModel типа Conductor<IScreen>и несколько ChildViews , который реализует IScreen.Я с использованием контейнера МОК составлять ViewModels и соответствующие ресурсы в App.

Один из ребенка подобно навигационного стола, из которого пользователь может получить доступ различных точек зрения детей и те, кто рассматривает ребенок поддержку навигацию к одному или два другим виду тоже.

Когда я смотрел на образцы , внедряющих концепцию экрана и проводников, все эти образцы непосредственно создали и активировали ViewModels по телефону ActivateItem(new ChildViewModel()), может быть для простоты, но у меня возникают проблемы с пониманием , как это создание ViewModel может быть делегировано контейнер МОК не имея зависимость от него.

Для одного или двух экранов по крайней мере, я могу вводить с помощью конструктора, но что делать, когда есть много мнений, к которым пользователь может перемещаться из любого вида и каждый из них имеют дополнительные зависимости от их собственных?

Прощение немоты от новичка, Может кто-нибудь мне точку в правильном направлении?

1 ответы

2

Вы хотите использовать вид модели фабрики, которые имеют зависимость от вашего контейнера IoC. Например, ваши ShellViewModel могут занять IViewModelFactory, который имеет методы для CreateNavigatorViewModel и т.д., которые весть NavigatorViewModel (или INavigatorViewModel), и эта реализация использует контейнер IoC для решения I / NavigatorViewModel.

Некоторые контейнеры IoC поддерживают автоматическое создание этих заводов, например Castle.Windsor имеет типизированных Factory Facility и Ninject имеет расширение, которое создает типы фабрики, вы просто определить интерфейс фабрики.