MVVMCROSS utilizza ampiamente la riflessione durante la costruzione di oggetti, in particolare attraverso la sua inversione del contenitore di controllo (IOC), che è gestito dall'istanza singleton `MVX.IOCProvider`. Ecco una panoramica dettagliata di come MVVMCRoss gestisce la riflessione durante la costruzione di oggetti:
Iniezione del costruttore
MVVMCRoss supporta l'iniezione del costruttore, che gli consente di risolvere automaticamente i parametri durante la costruzione di oggetti usando la riflessione. Quando si crea un oggetto, MVVMCROSS esegue i seguenti passaggi:
1. Riflessione per trovare il costruttore: MVVMCROSS utilizza la riflessione per identificare il costruttore della classe che viene istanziato.
2. Risoluzione dei parametri: esamina i parametri richiesti dal costruttore e identifica le interfacce o i tipi necessari.
3. Risolvi le implementazioni registrate: per ciascun parametro, MVVMCRoss utilizza `mvx.iocProvider.Resolve ()` Per ottenere l'implementazione registrata per l'interfaccia o il tipo.
4. INVOCHE COSTRUTTOR: una volta risolti tutti i parametri, MVVMCRoss utilizza la riflessione per invocare il costruttore con i parametri risolti.
Questo processo è ricorsivo, il che significa che se uno qualsiasi degli oggetti risolti richiede anche altri oggetti, MVVMCRoss risolverà anche quelli [1] [4].
registrazione in blocco per convenzione
MVVMCROSS supporta anche la registrazione in blocco delle classi utilizzando la riflessione. Questo è in genere fatto nella classe `app ', che eredita da` mvxapplication`. Il framework utilizza la riflessione per trovare tutte le classi nell'assemblaggio di base che si terminano con "servizio" e le registra come singoli singoli. Ciò si ottiene attraverso i seguenti passaggi:
1. Trova le classi che terminano con "Servizio": la riflessione viene utilizzata per trovare tutte le classi con nomi che terminano in "Servizio" all'interno dell'assemblaggio di base.
2. Identificare le interfacce: per ogni classe trovata, MVVMCRoss identifica le interfacce che implementa.
3. Registrati come singoli singoli: queste lezioni vengono quindi registrate come singoli singoli contro le rispettive interfacce. Ciò significa che non sono istanziati fino a quando non vengono richiesti per la prima volta [2] [4] [7].
ViewModels e Iniezione di dipendenza
MVVMCRoss utilizza lo stesso meccanismo di iniezione del costruttore per ViewModels. Quando si crea un ViewModel, MVVMCRoss risolve qualsiasi dipendenza specificata nel costruttore usando il contenitore IOC. Ciò consente una facile personalizzazione dei servizi su diverse piattaforme e facilita i test unitari consentendo l'uso di implementazioni simulate [1] [4].
personalizzazione e AppStart
La classe `app" è responsabile della registrazione di oggetti personalizzati sul contenitore IOC e dell'avvio dei ViewModels dell'applicazione. Se necessario, è possibile personalizzare il processo di avvio utilizzando una classe `AppStart` personalizzata per decidere quale ViewModel presentare prima [2] [7].
In sintesi, MVVMCRoss sfrutta la riflessione per automatizzare il processo di risoluzione delle dipendenze durante la costruzione di oggetti, rendendo più semplice la gestione di grafici di oggetti complessi e supportare lo sviluppo multipiattaforma con un codice minimo specifico della piattaforma.
Citazioni:[1] https://www.mvvmcross.com/documentation/fundamentals/dipendency-iniection
[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-mvvvmcross-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-using-app-and-setup