Skupni vzroki nullreferenceExceptions v mvvmcross
NullReferenceExceptions v MVVMcrossu lahko izhajajo iz več skupnih scenarijev, ki so pogosto povezane s tem, kako okvir obravnava reference in vezi o objektu. Tu je nekaj podrobnih razlag teh vzrokov:
1. Neinicializirani predmeti ali lastnosti **
Eden najpogostejših vzrokov NullReferenceExceptions je poskus dostopa do lastnosti ali metod predmetov, ki niso bili inicializirani. V MVVMcrossu se to lahko zgodi, če ViewModel ali lastnost znotraj njega ni pravilno nastavljena, preden ga poskusite vezati na pogled. Na primer, če lastnost ViewModela pred vezanjem ne bo inicializirana, bo dostop do te lastnosti vrgel NullReferenceException.
2. Nepravilna registracija IOC **
MVVMcross se močno opira na vbrizgavanje odvisnosti s svojo vsebnostjo MOK (inverzija kontrolne). Če komponente niso pravilno registrirane v vseblju MOK, jih ne smete pravilno rešiti, kar vodi do ničelnih referenc. To je še posebej pomembno pri uporabi registracij, specifičnih za platformo, kot je razvidno iz metode `inicializeLastChance" nastavitvenega razreda. Če ne pokličete metode osnovnega razreda, lahko povzroči težave na nekaterih platformah, kot je Monotouch [1].
3. Zavezan kontekst ni v celoti nastavljen **
V MVVMcross mora biti vezavni kontekst pred uporabo vezi v celoti nastavljen. Če vezavni kontekst ni pravilno inicializiran, lahko poskus vezave pogledov za ogled modelov povzroči NullReferenceExceptions. To še posebej velja, če programsko ustvarjate poglede brez uporabe datotek XIB [1].
4. mvx.iocprovider je null **
Pri gradnji ukazov, kot je `mvxasyncCommand` v modelih ogled, če je` mvx.iocprovider` null, lahko privede do NullreferenceExceptions. To vprašanje se pojavi, ker ponudnik MOK pred uporabo ni inicializiran, kar je pogosta težava pri preskusih enot, kjer nastavitev MOK morda ne bo v celoti izvedena [3].
#Slab
Čeprav ni specifična za MVVMcross, lahko uporaba null-sodiralnih operaterjev (`?") Nepravilno privede do nullreferenceExceptions, če so vmesni predmeti v verigi nični. Zagotavljanje, da se vsi deli verige pravilno inicializirajo, preden dostopate do ugnezdenih lastnosti, je ključnega pomena.
6. manjkajoči klici osnovnega razreda **
V razredih nastavitve MVVMcross lahko ne kličejo metod osnovnega razreda (kot je `inicializelastchance`) privede do nepopolne inicializacije potrebnih komponent, kar ima za posledico ničelne reference med izvajanjem [1].
Preprečevanje nullreferenceExceptions
Če želite preprečiti te izjeme, zagotovite, da se pred uporabo pravilno inicializirajo vsi predmeti in lastnosti. Preverite, ali so registracije MOK pravilne in da se po potrebi imenujejo metode osnovnega razreda. Poleg tega lahko uporaba NULL Checke in NULL-kondicionirani operaterji pomagajo preprečiti te izjeme, tako da se izognete poskusom odstranjevanja nulskih referenc.
Navedbe:[1] https://stackoverflow.com/questions/18954938/NullReference-Exception-during--ding-with-mvvmcross
[2] https://www.site24x7.com/learn/fixing-nullreferenceException-and-argumentullexception.html
[3] https://stackoverflow.com/questions/53597908/mvvm-cross-null-references-when-unit-testing-mxvasyncCommand/53618570
[4] https://pvs-studio.com/sl/blog/posts/csharp/1049/
[5] https://learn.microsoft.com/en-us/dotnet/api/system.nullreferenceException?view=net-9.0
[6] https://learn.microsoft.com/en-us/answers/Questions/944445/how-can-i-fix-the-error-system-nullreferenceExcept
[7] https://github.com/mvvmcross/mvvmcross/isissue/3115
[8] https://www.mvvmcross.com/documentation/fundamentals/data----