MVVMCross utiliza la reflexión ampliamente durante la construcción de objetos, particularmente a través de su contenedor de inversión de control (COI), que se gestiona por la instancia de 'MVX.ioCprovider` singleton. Aquí hay una descripción detallada de cómo MVVMCross maneja la reflexión durante la construcción de objetos:
Inyección del constructor
MVVMCross admite la inyección de constructor, que le permite resolver automáticamente los parámetros durante la construcción de objetos utilizando la reflexión. Al crear un objeto, MVVMCross realiza los siguientes pasos:
1. Reflexión para encontrar el constructor: MVVMCross utiliza la reflexión para identificar el constructor de la clase que se está instanciando.
2. Resolución de parámetros: examina los parámetros requeridos por el constructor e identifica las interfaces o tipos necesarios.
3. Resolver implementaciones registradas: para cada parámetro, MVVMCross usa `mvx.iocprovider.resolve ()` para obtener la implementación registrada para la interfaz o tipo.
4. Invocar constructor: una vez que se resuelven todos los parámetros, MVVMCross usa la reflexión para invocar el constructor con los parámetros resueltos.
Este proceso es recursivo, lo que significa que si alguno de los objetos resueltos también requiere otros objetos, MVVMCross los resolverá también [1] [4].
Registro a granel por convención
MVVMCross también admite el registro masivo de clases utilizando la reflexión. Esto se hace típicamente en la clase `APP`, que hereda de 'MVXApplication'. El marco utiliza la reflexión para encontrar todas las clases en el ensamblaje central que terminan con "servicio" y las registra como solteros perezosos. Esto se logra a través de los siguientes pasos:
1. Encuentre clases que terminen con "Servicio": la reflexión se utiliza para encontrar todas las clases con nombres que terminan en "Servicio" dentro del ensamblaje central.
2. Identificar interfaces: para cada clase encontrada, MVVMCross identifica las interfaces que implementa.
3. Regístrese como singletones perezosos: estas clases se registran como singletones perezosos contra sus respectivas interfaces. Esto significa que no están instanciados hasta que se solicitan por primera vez [2] [4] [7].
Viewmodels e inyección de dependencia
MVVMCross utiliza el mismo mecanismo de inyección de constructor para ViewModels. Al crear un ViewModel, MVVMCross resuelve cualquier dependencia especificada en el constructor utilizando el contenedor IOC. Esto permite una fácil personalización de los servicios en diferentes plataformas y facilita las pruebas unitarias al permitir el uso de implementaciones simuladas [1] [4].
Personalización y AppStart
La clase `APP` es responsable de registrar objetos personalizados en el contenedor IOC e iniciar los modelos de vista de la aplicación. Si es necesario, puede personalizar el proceso de inicio mediante el uso de una clase 'AppStart` personalizada para decidir qué ViewModel presentar primero [2] [7].
En resumen, MVVMCross aprovecha la reflexión para automatizar el proceso de resolución de dependencias durante la construcción de objetos, lo que facilita la gestión de gráficos de objetos complejos y admite el desarrollo multiplataforma con un código mínimo específico de la plataforma.
Citas:[1] https://www.mvvmcross.com/documentation/fundamentals/dependency-inyection
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/using-mvvvmcross-to-create-your-first-xamarin-app/creating-the-core-project/adding-an-pap-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