MVVMCROSS využíva reflexie vo veľkej miere počas konštrukcie objektov, najmä prostredníctvom inverzie riadiaceho kontajnera (IOC), ktorý je riadený inštanciou „MVX.iocprovider` Singleton. Tu je podrobný prehľad o tom, ako MVVMCross zvláda reflexiu počas konštrukcie objektov:
Injekcia konštruktora
MVVMCross podporuje vstrekovanie konštruktora, ktorá jej umožňuje automaticky vyriešiť parametre počas konštrukcie objektov pomocou odrazu. Pri vytváraní objektu vykonáva MVVMCross nasledujúce kroky:
1. Odraz na nájdenie konštruktora: MVVMCross používa odraz na identifikáciu inštancie konštruktora triedy.
2. Rozlíšenie parametrov: Skúma parametre požadované konštruktorom a identifikuje potrebné rozhrania alebo typy.
3. Vyriešte registrované implementácie: Pre každý parameter používa MVVMCross `mvx.iocprovider.Resolve ()` na získanie registrovanej implementácie pre rozhranie alebo typ.
4. Invoke Constructor: Akonáhle sú všetky parametre vyriešené, MVVMCross používa reflexiu na vyvolanie konštruktora pomocou rozlíšených parametrov.
Tento proces je rekurzívny, čo znamená, že ak niektorý z vyriešených objektov vyžaduje aj iné objekty, MVVMCross vyrieši aj tie [1] [4].
Bulk Registrácia podľa dohovoru
MVVMCross tiež podporuje hromadnú registráciu tried pomocou reflexie. Zvyčajne sa to robí v triede `App`, ktorá zdedí od` mvxapplication`. Rámec používa reflexiu na nájdenie všetkých tried v základnej zostave, ktoré končia „služba“, a zaregistruje ich ako lenivých singletonov. Dosahuje sa to prostredníctvom nasledujúcich krokov:
1. Nájdite triedy končiace „služba“: Reflexia sa používa na nájdenie všetkých tried s názvami končiace v „službe“ v základnej zostave.
2. Identifikujte rozhrania: Pre každú nájdenú triedu MVVMCross identifikuje rozhrania, ktoré implementuje.
3. Zaregistrujte sa ako lenivé singletony: Tieto triedy sú potom zaregistrované ako lenivé singletony proti svojim príslušným rozhraniam. To znamená, že nie sú inštantované, kým nebudú najprv požadované [2] [4] [7].
ViewModels a Injekcia závislosti
MVVMCross používa rovnaký mechanizmus vstrekovania konštruktora pre pohľady. Pri vytváraní programu ViewModel MVVMCross vyrieši všetky závislosti uvedené v konštruktore pomocou kontajnera IOC. To umožňuje ľahké prispôsobenie služieb na rôznych platformách a uľahčuje testovanie jednotiek tým, že umožňuje použitie falošných implementácií [1] [4].
Prispôsobenie a AppStart
Trieda `App` je zodpovedná za registráciu vlastných objektov v kontajneri IOC a za spustenie ViewModels aplikácie. Ak je to potrebné, môžete si prispôsobiť proces spustenia pomocou vlastnej triedy `AppStart` na rozhodnutie, ktorý program ViewModel predstavuje najskôr [2] [7].
Stručne povedané, MVVMCross využíva reflexiu na automatizáciu procesu rozlíšenia závislostí počas konštrukcie objektov, čo uľahčuje správu komplexných objektových grafov a podporuje vývoj medzi platformami s minimálnym kódom špecifickým pre platformu.
Citácie:[1] https://www.mvvmcross.com/documentation/funmamentals/dependency-injekcia
Https://yanxiaodi.gitbook.olio/xamarin-mvvmcross-wandbook/using-mvvmcross-to-create-your-first-xamarin-App/creating-the-core-project
[3] http://wojosoftware.com/software/mvvmcross/
[4] https://www.mvvmcross.com/documentation/funmamentals/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-verview
[8] https://www.mvvmcross.com/documentation/funmamentals/viewmodel-lifecycle
Https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvvm-apps-with-xamarin-mith-xamarin-mith-mith-with-xamarin-mith
[10] https://www.mvvmcross.com/documentation/advanced/custoughing-using-app-and-setup