2013-06-19 4 views
0

Люблю эту инфраструктуру до сих пор.MvvmCross - структурирование совместного просмотра моделей и просмотров

Это сказало, ударил мой первый блокпост. Я создал библиотеку на основе MvvmCross (на самом деле несколько библиотек), которая выполняет службы входа в систему, которые будут использоваться в нескольких кросс-платформенных приложениях того же семейства. Я не могу понять, как подключить эти библиотеки входа в другие приложения (которые также будут использовать MvvmCross). Я хочу иметь возможность повторно использовать те же ViewModels и Views в этих приложениях.

Предположим, что я читал и смотрел много видео-роликов. :) Что очень хорошо.

Я думаю, что MvvmCross with two core libraries был близорук к тому, что я пытаюсь сделать, что просто объединяет проекты MvvmCross и делает все это волшебным образом. Но, пройдя этот пост, который имел некоторые несоответствия в образцах кода, я не смог заставить это работать.

+0

Спасибо Я думаю, Http: // stackoverflow.com/questions/16704224/mvvmcross-with-two-core-libraries делает по крайней мере начало шаблона, в котором вы нуждаетесь. У вас есть более конкретные сведения о контрольно-пропускных пунктах, которые вы в настоящее время попали в ядро ​​и на каждую платформу до сих пор? – Stuart

+0

Я создал проект легкого ядра со стандартным MvvmCross, установленным из Nuget внутри него. Добавлена ​​ссылка на мой основной проект входа в этот новый проект. Измененный FirstViewModel имеет ICommand, который вызывает ShowViewModel первого «входа в систему», ViewModel внутри моего логина c рудная библиотека. Добавлен проект Droid и добавлен все ссылки, созданные представления и переопределены GetViewModelAssemblies(), которые использовали логику в сообщении из указанной выше ссылки. Я получаю Cirrious.CrossCore.Exceptions.MvxException: Не удалось загрузить ViewModel для типа SOA.Core.ListScopesViewModel из локатора MvxDefaultViewModelLocator –

+0

Включить трассировку и получить дополнительную информацию о неработающем загрузке исключения - 'protected override IMvxTrace CreateDebugTrace() {return new MvxDebugTrace (); } '- не удалось загрузить означает, что модель просмотра была найдена, но во время строительства возникла проблема. – Stuart

ответ

1

В программе установки есть 2 метода, которые сообщают mvvmcross, где искать Views и ViewModels. Если вы переопределите их, система должна найти ваши взгляды и просмотреть модели.

protected virtual Assembly[] GetViewAssemblies() 
    { 
     var assembly = GetType().Assembly; 
     return new[] {assembly}; 
    } 

    protected virtual Assembly[] GetViewModelAssemblies() 
    { 
     var app = Mvx.Resolve<IMvxApplication>(); 
     var assembly = app.GetType().Assembly; 
     return new[] {assembly}; 
    } 

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

  • дать сор некоторую дополнительную помощь в поиске XAML URLs для любых взглядов, которые в дополнительные сборки - по умолчанию mvx ищет только xaml uri в/views, а не в какой-либо другой папке в любой другой сборке. Один из способов предоставления URL-адресов xaml состоит в том, чтобы добавить MvxPhoneViewAttribute в файл C# вида, другой - переопределить MvxPhoneViewsContainer, чтобы он предоставлял настраиваемые URL-адреса. ..
  • настроить некоторые андроида параметры проекта, чтобы получить ресурсы, используемые совместно с библиотеками в основной проект (хотя эта функция получила намного лучше в этом году xamarin.android
+0

Наверное, я смущен тем, что должно произойти именно в этом переопределении для GetViewModelAssemblies(). Мне нужно сделать Mvx.Resolve явно для каждого типа приложения, который я создал, один для локального основного проекта, а другой для базового проекта Reference Login? А затем добавьте обе сборки к моему возвращенному Assembly []? –

+0

Существует только одно приложение. Вы можете повторно использовать viewmodels, службы, репозитории ... но не приложение. Таким образом, все 'GetViewModelAssemblies' возвращает массив объектов Assembly - по одному для каждой сборки, в которой есть ViewModels. – Stuart

+0

protected override Assembly [] GetViewModelAssemblies() { \t var vmAssembly = typeof (OutsideAssembly.App).Монтаж; \t var localAssembly = typeof (Assembly.App) .Сборка; \t return new [] {vmAssembly, localAssembly}; } выполнения Исключение - Cirrious.CrossCore.Exceptions.MvxException: Не удалось загрузить ViewModel для типа OutsideAssembly.FirstViewModel от локатора MvxDefaultViewModelLocator –