MVVMcross obsežno uporablja refleksijo med konstrukcijo predmetov, zlasti s svojo vsebnik inverzije nadzora (IOC), ki jo upravlja primerka "mvx.iocprovider` singleton. Tu je podroben pregled, kako MVVMcross obravnava razmislek med konstrukcijo predmeta:
Vbrizgavanje konstruktorja
MVVMcross podpira vbrizgavanje konstruktorja, ki mu omogoča samodejno rešitev parametrov med konstrukcijo predmetov z uporabo razmisleka. Pri ustvarjanju predmeta MVVMcross izvede naslednje korake:
1. Odsev za iskanje konstruktorja: MVVMcross uporablja refleksijo za prepoznavanje konstruktorja razreda, ki je nameščen.
2. Ločljivost parametrov: preuči parametre, ki jih zahteva konstruktor, in identificira vmesnike ali vrste.
3. Rešite registrirane izvedbe: Za vsak parameter MVVMcross uporablja `mvx.iocprovider.resolve ()` za pridobitev registrirane izvedbe za vmesnik ali vrsto.
4. Invoke Constructor: Ko so vsi parametri razrešeni, MVVMcross uporablja refleksijo za priklic konstruktorja z rešenimi parametri.
Ta postopek je rekurziven, kar pomeni, če kateri koli od rešenih predmetov zahteva tudi druge predmete, bo MVVMcross rešil tudi te [1] [4].
Registracija v veliki meri s konvencijo
MVVMcross podpira tudi veliko registracijo razredov z razmislek. Običajno se to izvaja v razredu "App", ki podeduje iz "mvxapplication". Okvir uporablja razmislek, da bi našli vse razrede v osnovnem sklopu, ki se konča s "storitvijo", in jih registrira kot leni singletoni. To dosežemo z naslednjimi koraki:
1. Poiščite razrede, ki se končajo z "Service": Reflection se uporablja za iskanje vseh razredov z imeni, ki se končajo v "servisu" znotraj jedra.
2. Opredelite vmesnike: za vsak najdeni razred MVVMcross identificira vmesnike, ki jih izvaja.
3. Registrirajte se kot leni singletoni: Ti razredi so nato registrirani kot leni singletoni proti njihovim vmesnikom. To pomeni, da niso instancirani, dokler jih prvič ne zahtevajo [2] [4] [7].
ViewModels in vbrizgavanje odvisnosti
MVVMcross uporablja isti mehanizem za vbrizgavanje konstruktorja za pogledi. Pri ustvarjanju ViewModela MVVMcross razreši vse odvisnosti, določene v konstruktorju s pomočjo vsebnika IOC. To omogoča enostavno prilagajanje storitev na različnih platformah in olajša testiranje enot z omogočanjem uporabe posmeh [1] [4].
Prilagoditev in aplikacija
Razred `App` je odgovoren za registracijo predmetov po meri v vsebnik IOC in zagon v aplikaciji ViewModels. Če je potrebno, lahko postopek zagona prilagodite s pomočjo razreda po meri `appstart`, da se odločite, kateri ViewModel naj najprej predstavite [2] [7].
Če povzamemo, MVVMcross izkorišča razmislek o avtomatizaciji procesa reševanja odvisnosti med konstrukcijo predmetov, kar olajša upravljanje kompleksnih objektnih grafov in podpira razvoj navzkrižnih platform z minimalno kodo, specifično za platformo.
Navedbe:[1] https://www.mvvmcross.com/documentation/fundamentals/Dependency-Inection
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handBook/using-mvvmcross-cto-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/customizing-using-app-and-setup