Bendros nulinės.Exceptions priežastys MVVMCross
„NullReferenceExceptions in MvVMCross“ gali kilti iš kelių įprastų scenarijų, dažnai susijusių su tuo, kaip sistema tvarko objektų nuorodas ir įrišimus. Čia yra keletas išsamių šių priežasčių paaiškinimų:
1. Neištyčioti objektai ar savybės **
Viena iš labiausiai paplitusių „NullReferenceExceptions“ priežasčių yra bandymas pasiekti ne inicializuotų objektų savybes ar metodus. „MVVMCross“ tai gali atsitikti, jei prieš bandant surišti prie rodinio, joje nėra tinkamai nustatyta „ViewModel“ ar savybė. Pvz., Jei „ViewModel“ nuosavybė nebus inicijuota prieš įpareigojant, prieiga prie to turto bus numatyta „NullreferenceException“.
2. Neteisinga IOC registracija **
MVVMCross labai priklauso nuo priklausomybės injekcijos per IOC (valdymo inversija) talpyklą. Jei komponentai nėra tinkamai užregistruoti IOC konteineryje, jie gali būti netinkamai išspręsti, todėl gali būti nurodytos NULL nuorodos. Tai ypač svarbu, kai naudojami konkrečiai platformai būdingi registracijos, kaip matyti iš sąrankos klasės „Initizelastchance“ metodo. Nepavykus iškviesti bazinės klasės „inicializelastchance“ metodo, gali sukelti problemų tam tikrose platformose, tokiose kaip „MonoTouch“ [1].
3. Įrišimo kontekstas nevisiškai nustatytas **
MVVMCROSS, prieš pritaikant įrišimus, surišimo kontekstas turi būti visiškai nustatytas. Jei įrišimo kontekstas nėra tinkamai inicijuotas, bandymas surišti vaizdus į modelius peržiūrėti gali sukelti „NullReferenceExceptions“. Tai ypač pasakytina apie rodinius programiškai nenaudojant XIB failų [1].
4. MVX.IOCPROVIDER BE NULL **
Konstruojant tokias komandas kaip „MvxAsynccommand“ „View“ modeliuose, jei „mvx.iocprovider“ yra nulinė, tai gali sukelti „NullReferenceExceptions“. Ši problema kyla todėl, kad prieš naudojimą IOK teikėjas nėra inicijuotas, o tai yra dažna vienetų testų problema, kai IOC sąranka gali būti ne iki galo įvykdyta [3].
5
Nors ir nėra būdingi „MvVMCross“, naudodamiesi niekiniais kondicionavimo operatoriais (`? .`) Neteisingai gali sukelti„ NullreferenceExceptions “, jei tarpiniai grandinės objektai yra niekiniai. Būtina užtikrinti, kad visos grandinės dalys būtų tinkamai inicijuotos prieš patekant į įdėtos savybes.
6. Trūksta bazinės klasės skambučių **
MVVMCross sąrankos klasėse nesugebėjimas iškviesti bazinių klasių metodų (pvz., „Inicializelastchance“) gali sukelti neišsamų būtinų komponentų inicijavimą, todėl vykdymo metu bus pateiktos niekinės nuorodos [1].
„NullReferenceExceptions“ prevencija
Norėdami užkirsti kelią šioms išimtims, įsitikinkite, kad prieš naudojimą visi objektai ir savybės būtų tinkamai inicializuojami. Patikrinkite, ar TOC registracijos yra teisingos ir kad būtina, kad bazinės klasės metodai yra vadinami. Be to, naudojant niekinius čekius ir niekinę kondicionierių operatoriai gali padėti išvengti šių išimčių, išvengdami bandymų panaikinti NULL nuorodas.
Citatos:[1] https://stackoverflow.com/questions/18954938/nullreference-exception-during-inding-with-mvvmcross
[2] https://www.site24x7.com/learn/fixing-bulreferenceException-and-argumentNullException.html
[3] https://stackoverflow.com/questions/53597908/mvvm-cross-ant-references-when-unit-testting-mxvasynccommand/53618570
[4] https://pvs-sutudio.com/en/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-nulrreferenceExcept
[7] https://github.com/mvvmcross/mvvmcross/issues/3115
[8] https://www.mvvmcross.com/documentation/fundamentals/data-binding