Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Comment MVVMCross gère-t-il la réflexion pendant la construction d'objets


Comment MVVMCross gère-t-il la réflexion pendant la construction d'objets


MVVMCROSS utilise de manière approfondie la réflexion pendant la construction d'objets, en particulier à travers son conteneur d'inversion de contrôle (CIO), qui est géré par l'instance de Singleton `Mvx.IocProvider. Voici un aperçu détaillé de la façon dont MVVMCross gère la réflexion pendant la construction d'objets:

Injection de constructeur

MVVMCross prend en charge l'injection de constructeur, ce qui lui permet de résoudre automatiquement les paramètres pendant la construction d'objets en utilisant la réflexion. Lors de la création d'un objet, MVVMCross effectue les étapes suivantes:

1. Réflexion pour trouver le constructeur: Mvvmcross utilise la réflexion pour identifier le constructeur de la classe instanciée.
2. Résolution des paramètres: il examine les paramètres requis par le constructeur et identifie les interfaces ou types nécessaires.
3. Résoudre les implémentations enregistrées: Pour chaque paramètre, Mvvmcross utilise `mvx.iocprovider.resolve ()` pour obtenir l'implémentation enregistrée pour l'interface ou le type.
4. Constructeur invoqué: une fois tous les paramètres résolus, MVVMCross utilise la réflexion pour invoquer le constructeur avec les paramètres résolus.

Ce processus est récursif, ce qui signifie que si l'un des objets résolus nécessite également d'autres objets, MVVMCROSS les résoudre également [1] [4].

Enregistrement en vrac par convention

MVVMCross prend également en charge l'enregistrement en vrac des classes en utilisant la réflexion. Cela se fait généralement dans la classe «App», qui hérite de «mvxapplication». Le framework utilise la réflexion pour trouver toutes les classes de l'assemblage de base qui se terminent par "service" et les enregistre comme des singletons paresseux. Ceci est réalisé dans les étapes suivantes:

1. Trouvez des classes se terminant par "Service": la réflexion est utilisée pour trouver toutes les classes avec des noms se terminant par "Service" dans l'assemblage de base.
2. Identifier les interfaces: Pour chaque classe trouvée, MVVMCross identifie les interfaces qu'il implémente.
3. Inscrivez-vous en tant que singletons paresseux: ces classes sont ensuite enregistrées comme singletons paresseux contre leurs interfaces respectives. Cela signifie qu'ils ne sont pas instanciés jusqu'à ce qu'ils soient demandés pour la première fois [2] [4] [7].

ViewModels et injection de dépendance

MVVMCROSS utilise le même mécanisme d'injection de constructeur pour les modes de vue. Lors de la création d'un ViewModel, MVVMCross résout toutes les dépendances spécifiées dans le constructeur à l'aide du conteneur IOC. Cela permet une personnalisation facile des services sur différentes plates-formes et facilite les tests unitaires en permettant l'utilisation des implémentations simulées [1] [4].

Personnalisation et appstart

La classe «App» est responsable de l'enregistrement des objets personnalisés sur le conteneur IOC et du démarrage des ViewModels de l'application. Si nécessaire, vous pouvez personnaliser le processus de démarrage en utilisant une classe «AppStart» personnalisée pour décider de quel ViewModel présenter d'abord [2] [7].

En résumé, MVVMCross exploite la réflexion pour automatiser le processus de résolution des dépendances lors de la construction d'objets, ce qui facilite la gestion des graphiques d'objets complexes et prend en charge le développement de plate-forme multiplié avec un code spécifique à la plate-forme minimale.

Citations:
[1] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/using-mvvmcross-to-create-your-first-xamarin-app/creating-the-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/customalize-using-app-and-setup