Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Как отражает режущее обозрение MVVMcross во время построения объекта


Как отражает режущее обозрение MVVMcross во время построения объекта


MVVMcross широко использует отражение во время построения объектов, особенно благодаря своему контейнеру управления (IOC), который управляется экземпляром `mvx.iocprovider` singleton. Вот подробный обзор того, как MVVMcross обрабатывает отражение во время строительства объекта:

Инъекция конструктора

MVVMcross поддерживает инъекцию конструктора, что позволяет автоматически разрешать параметры во время построения объектов с использованием отражения. При создании объекта MVVMcross выполняет следующие шаги:

1. Отражение, чтобы найти конструктор: MVVMcross использует отражение для определения создания конструктора класса.
2. Разрешение параметров: он рассматривает параметры, требуемые конструктором, и идентифицирует необходимые интерфейсы или необходимые типы.
3. Установите зарегистрированные реализации: для каждого параметра MVVMcross использует `mvx.iocprovider.resolve ()` для получения зарегистрированной реализации для интерфейса или типа.
4. Призыв конструктор: как только все параметры будут разрешены, MVVMcross использует отражение, чтобы вызвать конструктор с разрешенными параметрами.

Этот процесс является рекурсивным, что означает, что если какой -либо из разрешенных объектов также требует других объектов, MVVMcross также разрешает их [1] [4].

Настройка регистрации по конвенции

MVVMcross также поддерживает массовую регистрацию классов с использованием отражения. Обычно это делается в классе `app`, который наследует от` mvxapplication '. Структура использует отражение, чтобы найти все классы в основной сборке, которые заканчиваются «сервисом», и регистрирует их как ленивые синглтоны. Это достигается через следующие шаги:

1. Найти классы, заканчивающиеся «Сервис»: отражение используется для поиска всех классов с именами, заканчивающимися в «Сервисе» в основной сборке.
2. Идентифицируйте интерфейсы: для каждого найденного класса MVVMcross идентифицирует интерфейсы, которые он реализует.
3. Зарегистрируйтесь как ленивые синглтоны: эти классы затем зарегистрированы как ленивые синглтоны против их соответствующих интерфейсов. Это означает, что они не подвергаются экземплярам, ​​пока их не будут запрашиваться [2] [4] [7].

ViewModels и инъекция зависимости

MVVMcross использует тот же механизм впрыска конструктора для ViewModels. При создании ViewModel MVVMcross разрешает любые зависимости, указанные в конструкторе с использованием контейнера IOC. Это позволяет легко настраивать услуги на разных платформах и облегчает модульные тестирование, позволяя использовать макет реализации [1] [4].

Настройка и приложение

Класс App` отвечает за регистрацию пользовательских объектов в контейнере IOC и запуск просмотров приложения. При необходимости вы можете настроить процесс запуска, используя пользовательский класс `appstart`, чтобы решить, какую ViewModel представил первый [2] [7].

Таким образом, MVVMcross использует отражение для автоматизации процесса разрешения зависимостей во время построения объектов, что облегчает управление сложными графами объектов и поддержку кроссплатформенного разработки с минимальным кодом, специфичной для платформы.

Цитаты:
[1] https://www.mvvmcross.com/documentation/fundamentals/dependency-nection
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/using-mvvmcross-to-create-your-first-xamarin-app/creating-to-core-project/adding-an-app-class
[3] http://wojosoftware.com/software/mvvmcross/
[4] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[5] https://www.codeproject.com/articles/863695/introduction-to-mvvmcross-platform
[6] https://github.com/media-tools/sqlite-net-extensions
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[10] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup