„MVVMCross“ išsamiai naudoja atspindį statant objektą, ypač per jo inversijos (IOC) talpyklą, kurią valdo „mvx.iocprovider“ singleton egzempliorius. Čia pateikiama išsami apžvalga, kaip „MVVMCross“ tvarko atspindį statant objektą:
konstruktoriaus injekcija
„MVVMCross“ palaiko konstruktorių injekciją, kuri leidžia automatiškai išspręsti parametrus objektų konstrukcijos metu, naudojant atspindį. Kurdamas objektą, MVVMCROSS atlieka šiuos veiksmus:
1. Konstruktoriaus radimo atspindys: MVVMCross naudoja atspindį, kad nustatytų akimirksnio klasės konstruktorių.
2. Parametro skiriamoji geba: ji tiria konstruktoriaus reikalaujamus parametrus ir identifikuoja reikalingas sąsajas ar tipus.
3. Išspręskite registruotus įgyvendinimus: Kiekvienam parametrui MVVMCross naudoja „mvx.iocprovider.resolve ()“, kad gautų registruotą sąsają ar tipą.
4. Informacija apie konstruktorių: Išsprendę visus parametrus, MVVMCross naudoja atspindį, kad pasinaudotų konstruktoriumi su išspręstais parametrais.
Šis procesas yra rekursinis, tai reiškia, jei kuris nors iš išspręstų objektų taip pat reikalauja ir kitų objektų, MVVMCross išspręs ir tuos [1] [4].
birių registracija pagal konvenciją
„MVVMCross“ taip pat palaiko didelę klasių registraciją, naudodama refleksiją. Paprastai tai daroma „App“ klasėje, paveldima iš „mVXApplication“. Framewore naudojamas atspindys, kad surastų visas klases pagrindinėje rinkinyje, kurios baigiasi „paslauga“ ir registruoja juos kaip tinginius singletonus. Tai pasiekiama šiais veiksmais:
1. Raskite klases, kurios baigiasi „paslauga“: atspindys naudojamas norint rasti visas klases su pavadinimais, kurie baigiasi „tarnyba“ pagrindiniame rinkinyje.
2. Identifikuokite sąsajas: Kiekvienai rastai klasei MVVMCross identifikuoja sąsajas, kurias ji įgyvendina.
3. Prisiregistruokite kaip tingūs singletonai: Tada šios klasės yra užregistruotos kaip tingūs singletonai pagal jų atitinkamas sąsajas. Tai reiškia, kad jie nėra akimirksniu, kol jiems pirmiausia reikalaujama [2] [4] [7].
„ViewModels“ ir priklausomybės injekcija
„MVVMCross“ naudoja tą patį konstruktoriaus įpurškimo mechanizmą, skirtą „ViewModels“. Kurdamas „ViewModel“, „MVVMCross“ išsprendžia bet kokias konstruktoriuje nurodytas priklausomybes, naudodamas IOC konteinerį. Tai leidžia lengvai pritaikyti paslaugas įvairiose platformose ir palengvina vienetų testavimą, įgalinant naudoti pavyzdžių diegimus [1] [4].
pritaikymas ir „AppStart“
„App“ klasė yra atsakinga už pasirinktinių objektų registravimą į IOC konteinerį ir programos „ViewModels“ paleidimą. Jei reikia, galite pritaikyti paleidimo procesą naudodami pasirinktinę „AppStart“ klasę, kad nuspręstumėte, kurį „ViewModel“ pateikia pirmiausia [2] [7].
Apibendrinant galima pasakyti, kad „MVVMCross“ pasinaudoja atspindžiu, kad automatizuotų priklausomybių sprendimo procesą objektų konstrukcijos metu, kad būtų lengviau valdyti sudėtingus objektų grafikus ir palaikyti kryžminio platformos kūrimą su minimaliu platformos specifiniu kodu.
Citatos:[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-applass
[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 ir-setup