Правильный способ использования экранов вместе с IOC в caliburn

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

Я разработал приложение, чтобы охватить большинство основ, которые имеют ShellViewModel типа Conductor<IScreen> и несколько ChildView, которые реализуют IScreen. Я использую контейнер IOC для создания ViewModels и связанных ресурсов в приложении.

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

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

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

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


person Mat J    schedule 29.07.2012    source источник


Ответы (1)


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

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

person devdigital    schedule 29.07.2012
comment
MEF отлично работает для IoC, но я в основном использую Ninject и добился с ним большого успеха. кажется, что в целом гораздо меньше стандартного кода, чем в MEF. - person erodewald; 08.08.2012