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