MVVMCross'ta, diğer çerçevelerde olduğu gibi NULL referans istisnaları, tipik olarak bir NULL nesne referansına erişmeye veya manipüle etmeye çalışırken ortaya çıkar. İşte bu istisnaların ortaya çıkabileceği bazı yaygın nedenler ve senaryolar:
1. İnitilmez nesneler **
NULL referans istisnalarının en yaygın nedenlerinden biri, nesnelerin kullanılmadan önce düzgün bir şekilde başlatılmamasıdır. MVVMCross'ta bu, Hizmetler veya Yardımcılar IOC konteynerine kaydedilmezse veya doğru şekilde çözülmezse gerçekleşebilir. Örneğin, `mvx.iocprovider` null ise, bağımlılıkları çözmeye çalışırken NULL referans istisnalarına yol açabilir [1].2.. Yanlış IOC kurulumu **
MVVMcross, bağımlılık enjeksiyonu için IOC (kontrolün tersine çevrilmesi) konteynerine büyük ölçüde dayanır. IOC kurulumu eksik veya yanlışsa, null referanslara yol açabilir. Örneğin, bir hizmet kayıtlı değilse, çözmeye çalışmak boş bir referans istisnası ile sonuçlanır.3. Bağlanma Sorunları **
MVVMCross'ta, görünüm modellerini görünümlerle bağlamak için bağlamalar kullanılır. Bağlayıcı bağlam düzgün bir şekilde ayarlanmazsa veya bağlayıcı ifadelerle ilgili sorunlar varsa, boş referans istisnalarına yol açabilir. Bu özellikle platforma özgü görünümler ve bağlamalar kullanılırken geçerlidir [3].4. Navigasyon ve Görüntüle Model Başlatma **
Görünümler arasında gezinirken, görünüm modelleri düzgün bir şekilde başlatılmamışsa veya navigasyon hizmeti kurulumuyla ilgili sorunlar varsa, boş referans istisnalarına yol açabilir. Bu, navigasyon hizmeti doğru bir şekilde kaydedilmiyorsa veya görünüm modeli yapıcısı gerekli bağımlılıkları başlatamıyorsa ortaya çıkabilir [5].5. Test senaryoları **
Birim test senaryolarında, `mvxasynccommand 'gibi MVVMCross bileşenleri, IOC sağlayıcısı başlatılmazsa boş referans istisnaları atabilir. Bunun nedeni, IOC sağlayıcısının bağımlılıkları doğru bir şekilde çözmek için test ortamlarında manuel olarak ayarlanması gerektiğidir [1].Sorun Giderme Adımları
MVVMCross'taki NULL referans istisnalarını gidermek için şu adımları izleyin:- Yığın izini kontrol edin: İstisnaya neden olan tam kod satırını belirleyin.
- Nesnenin başlatılmasını doğrulayın: Kullanmadan önce gerekli tüm nesnelerin düzgün bir şekilde başlatıldığından emin olun.
- IOC kurulumunu inceleyin: Gerekli tüm hizmetlerin doğru bir şekilde kaydedildiğini ve çözüldüğünü onaylayın.
- Hata Ayıklama: Hangisinin NULL olduğunu tanımlamak için çalışma zamanında değişkenleri ve nesneleri incelemek için kesme noktalarını kullanın.
- Bağlanma ifadelerini gözden geçirin: Bağlamaların doğru bir şekilde kurulduğundan ve bağlanma bağlamının düzgün bir şekilde başlatıldığından emin olun.
Bu adımları izleyerek ve ortak nedenleri anlayarak, MVVMCross uygulamalarındaki boş referans istisnalarını etkili bir şekilde teşhis edebilir ve çözebilirsiniz.
Alıntılar:[1] https://stackoverflow.com/questions/53597908/mvvm-cross-null-references-when-unit-test-mxvasynccommand/536185770
[2] https://learn.microsoft.com/en-us/answers/questions/1323892/how-to-solves-system-nulreferenceexception
[3] https://stackoverflow.com/questions/18954938/nullreference-exception-binding-with-mvvmcrross
[4] https://forum.uipath.com/t/datatable-has--value-but-thing-null-reference/462413
[5] https://github.com/mvvmcross/mvvmcross/issues/4452
[6] https://pvs-studio.com/en/blog/posts/csharp/1049/
[7] https://github.com/mvvmcross/mvvmcross/issues/3571
[8] https://learn.microsoft.com/en-us/answers/questions/944445/how-can-i-fix-the-error-system-nulreferencecept