Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kako MVVMcross odraz medsebojnosti med konstrukcijo predmeta


Kako MVVMcross odraz medsebojnosti med konstrukcijo predmeta


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