Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ako MVVMCross zvládne odraz počas konštrukcie objektov


Ako MVVMCross zvládne odraz počas konštrukcie objektov


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