다른 프레임 워크와 마찬가지로 MVVMCross의 NULL 참조 예외는 일반적으로 NULL 객체 참조에 액세스하거나 조작하려고 시도 할 때 발생합니다. 다음은 이러한 예외가 발생할 수있는 몇 가지 일반적인 원인과 시나리오입니다.
1. 비 초기 개체 **
NULL 참조 예외의 가장 일반적인 원인 중 하나는 객체가 사용하기 전에 객체가 제대로 초기화되지 않은 경우입니다. MVVMCross에서는 서비스 나 도우미가 IOC 컨테이너에 등록되지 않거나 올바르게 해결되지 않은 경우 발생할 수 있습니다. 예를 들어,`mvx.iocprovider`가 null이면 종속성을 해결하려고 할 때 널 참조 예외를 유발할 수 있습니다 [1].2. 잘못된 IOC 설정 **
MVVMCross는 의존성 주입을 위해 IOC (제어의 역전) 컨테이너에 크게 의존합니다. IOC 설정이 불완전하거나 부정확 한 경우 Null 참조로 이어질 수 있습니다. 예를 들어, 서비스가 등록되지 않은 경우 해결하려고 시도하면 널 참조 예외가 발생합니다.3. 구속력있는 문제 **
MVVMCross에서는 바인딩이 뷰 모델을 뷰와 연결하는 데 사용됩니다. 바인딩 컨텍스트가 올바르게 설정되지 않았거나 바인딩 표현에 문제가있는 경우 Null 참조 예외로 이어질 수 있습니다. 이것은 플랫폼 별 뷰와 바인딩을 사용할 때 특히 그렇습니다 [3].4. 탐색 및보기 모델 초기화 **
뷰 사이를 탐색 할 때, 뷰 모델이 제대로 초기화되지 않거나 탐색 서비스 설정에 문제가있는 경우 Null 참조 예외로 이어질 수 있습니다. 내비게이션 서비스가 올바르게 등록되지 않았거나보기 모델 생성자가 필요한 종속성을 초기화하지 않는 경우에 발생할 수 있습니다 [5].5. 테스트 시나리오 **
단위 테스트 시나리오에서`mvxasynccommand`와 같은 MVVMCross 구성 요소는 IOC 제공 업체가 초기화되지 않으면 NULL 참조 예외를 던질 수 있습니다. 이는 종속성을 올바르게 해결하기 위해 테스트 환경에서 IOC 제공 업체를 수동으로 설정해야하기 때문입니다 [1].문제 해결 단계
MVVMCross의 NULL 참조 예외를 해결하려면 다음을 수행하십시오.- 스택 추적 확인 : 예외를 일으키는 정확한 코드 줄을 식별하십시오.
- 개체 초기화 확인 : 사용하기 전에 필요한 모든 객체가 올바르게 초기화되도록하십시오.
- IOC 설정 검사 : 필요한 모든 서비스가 등록되어 올바르게 해결되었는지 확인하십시오.
- 디버깅 : 중단 점을 사용하여 런타임의 변수 및 객체를 검사하여 NULL인지 식별하십시오.
- 바인딩 표현 검토 : 바인딩이 올바르게 설정되고 바인딩 컨텍스트가 올바르게 초기화되어 있는지 확인하십시오.
이러한 단계를 수행하고 일반적인 원인을 이해함으로써 MVVMCross 응용 프로그램에서 NULL 참조 예외를 효과적으로 진단하고 해결할 수 있습니다.
인용 :[1] https://stackoverflow.com/questions/53597908/mvvm-cross-null-references-hen-unit-testing-mxvasynccommand/53618570
[2] https://learn.microsoft.com/en-us/answers/questions/1323892/how-to-tolve-system-nullreferenceexception
[3] https://stackoverflow.com/questions/18954938/nullreference-exception-during-binding-with-mvvmcross
[4] https://forum.uipath.com/t/datatable-has-a-value-but-throwing-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-nullreferenceexcept