Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Як mvvmcross обробляє відображення під час побудови об'єкта


Як mvvmcross обробляє відображення під час побудови об'єкта


MVVMCross використовує відбиття широко під час побудови об'єктів, особливо через його інверсію контрольного (МОК) контейнера, яким керується екземпляр Singleton `mvx.iocprovider`. Ось детальний огляд того, як MVVMcross обробляє відображення під час побудови об'єктів:

ін'єкція конструктора

MVVMCross підтримує введення конструктора, що дозволяє йому автоматично розбирати параметри під час побудови об'єкта за допомогою відбиття. Створюючи об'єкт, MVVMCross виконує такі кроки:

1. Відбиття для пошуку конструктора: Mvvmcross використовує відображення для ідентифікації конструктора класу, що підлягає миттєвому.
2. Роздільна здатність параметрів: Він вивчає параметри, необхідні конструктором, та ідентифікує необхідні інтерфейси або типи.
3. Розв’яжіть зареєстровані реалізації: Для кожного параметра mvvmcross використовує `mvx.iocprovider.resolve ()` для отримання зареєстрованої реалізації для інтерфейсу або типу.
4. Конструктор виклику: Після того, як всі параметри будуть вирішені, mvvmcross використовує відображення для виклику конструктора з вирішеними параметрами.

Цей процес є рекурсивним, тобто якщо будь -який з вирішених об'єктів також потребує інших об'єктів, MVVMCross вирішить їх також [1] [4].

об'ємна реєстрація за конвенцією

MVVMCross також підтримує об'ємну реєстрацію занять за допомогою роздумів. Зазвичай це робиться в класі `app`, який успадковує` mvxaplication`. Рамка використовує роздуми, щоб знайти всі класи в основній збірці, які закінчуються "сервісом", і реєструє їх як ледачих синглів. Це досягається за допомогою наступних кроків:

1. Знайдіть заняття, що закінчуються "службою": відображення використовується для пошуку всіх класів з іменами, що закінчуються в "службі" в основній збірці.
2. Визначте інтерфейси: Для кожного знайденого класу MVVMcross ідентифікує інтерфейси, які він реалізує.
3. Зареєструйтесь як Lazy Singletons: Ці заняття потім зареєстровані як Lazy Singletons проти відповідних інтерфейсів. Це означає, що вони не є миттєвими, поки їх вперше не вимагають [2] [4] [7].

ViewModels та ін'єкція залежності

MVVMCross використовує той самий механізм вприскування конструктора для ViewModels. Створюючи ViewModel, MVVMCross вирішує будь -які залежності, зазначені в конструкторі, використовуючи контейнер МОК. Це дозволяє легко налаштувати послуги на різних платформах та полегшує тестування одиниць, дозволяючи використовувати макетні реалізації [1] [4].

Налаштування та Appstart

Клас `App` відповідає за реєстрацію власних об'єктів у контейнері МОК та запуску ViewModels програми. Якщо потрібно, ви можете налаштувати процес запуску, використовуючи спеціальний клас `appstart`, щоб вирішити, який ViewModel представити спочатку [2] [7].

Підсумовуючи, MVVMCross використовує відображення для автоматизації процесу вирішення залежності під час побудови об'єктів, що полегшує управління складними графіками об'єктів та підтримці перехресної розробки з мінімальною платформою.

Цитати:
[1] https://www.mvvmcross.com/documentation/fundamentals/dependency-incection
[2.
[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