2013-06-26 1 views
2

У меня есть ситуация, когда я хочу «разрешить» модели просмотра без необходимости вручную вызывать контейнер IoC для разрешения зависимостей viewmodels.Создать модель с использованием MVVMCross, построенного на заводе?

Я предполагаю, что внутри Mvvmcross имеет фабрику viewmodel, используемую для создания моделей viewmodels при вводе их зависимостей.

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

По существу, я пытаюсь создать «HomeViewModel» для tabcontroller, но не хочу жестко кодировать разрешение зависимости для каждой модели представлений «табуляции».

ответ

3

Что я лично делаю, это использовать IoC в моем HomeViewModel, чтобы получить все зависимости вложенных ViewModel и передать их при создании их. Так что-то в подобных:

private ITwitterService _twitterService; 
private IFacebookService _facebookService; 
private IDataProcessingService _dataProcessingService; 
private TwitterViewModel _twitterViewModel; 
private FacebookViewModel _facebookViewModel; 

public HomeViewModel(ITwitterService t, IFacebookService f, IDataProcessingService d) 
{ 
    _twitterService = t; 
    _facebookService = f; 
    _dataProcessingService = d; 
    _twitterViewModel = new TwitterViewModel(_twitterService, _dataProcessingService); 
    _facebookViewModel = new FacebookViewModel(_facebookService, _dataProcessingService); 
} 

Тогда я просто использовать эти экземпляры моих ViewModel с в моих закладках.

+2

+1 - это то, что я делаю тоже. я думаю, вы также можете использовать 'Mvx.IocConstruct', если хотите, или хотите, чтобы вы создали полное создание типа параметра навигации, вы можете попробовать' Mvx.Resolve' 'IMvxViewModelLoader' тоже – Stuart

+0

Это то, что я изначально думал о том, что делать, но не был уверен, был ли более правильный путь. Работает для меня +1 – theMothaShip

+0

Да, это хорошо. Но тогда вы подталкиваете зависимости моделей вашего подвид до родителя ... Полностью побеждает цель МОК до «Разделения проблем». Не то, чтобы я есть лучший ответ .. но я чувствую, что должен быть один. –