mvvmcross에서 nullReferenceExceptions의 일반적인 원인
MVVMCross의 NullReferenceExceptions는 종종 프레임 워크가 객체 참조 및 바인딩을 처리하는 방법과 관련된 몇 가지 일반적인 시나리오에서 발생할 수 있습니다. 다음은 이러한 원인에 대한 자세한 설명입니다.
1. 비 초기 개체 또는 속성 **
NullReferenceExceptions의 가장 일반적인 원인 중 하나는 초기화되지 않은 객체의 속성 또는 방법에 액세스하려고 시도하는 것입니다. MVVMCross에서는 뷰 모델이나 그 속성이 뷰에 바인딩되기 전에 제대로 설정되지 않은 경우 발생할 수 있습니다. 예를 들어, 뷰 모델의 속성이 바인딩되기 전에 초기화되지 않은 경우 해당 속성에 액세스하면 NullReferenceException이 발생합니다.
2. 잘못된 IOC 등록 **
MVVMCross는 IOC (Control of Control) 컨테이너를 통한 의존성 주입에 크게 의존합니다. IOC 컨테이너에 구성 요소가 올바르게 등록되지 않은 경우 제대로 해결되지 않아 Null 참조로 이어질 수 있습니다. 이는 설정 클래스의 'InitializelastChance'메소드에서 볼 수 있듯이 플랫폼 별 등록을 사용할 때 특히 관련이 있습니다. 기본 클래스의`initializelastchance '메소드를 호출하지 않으면 Monotouch [1]와 같은 특정 플랫폼에서 문제가 발생할 수 있습니다.
3. 바인딩 컨텍스트가 완전히 설정되지 않았습니다 **
MVVMCross에서는 바인딩을 적용하기 전에 결합 컨텍스트를 완전히 설정해야합니다. 바인딩 컨텍스트가 올바르게 초기화되지 않으면 모델을 뷰를 바인딩하려고 시도하면 NullReferenceExceptions가 발생할 수 있습니다. 이것은 XIB 파일을 사용하지 않고 프로그래밍 방식으로 뷰를 만들 때 특히 그렇습니다 [1].
4. mvx.iocprovider being null **
보기 모델에서`mvxasynccommand`와 같은 명령을 구성 할 때`mvx.iocprovider`가 null 인 경우 nullReferenceExceptions로 이어질 수 있습니다. 이 문제는 IOC 제공 업체가 사용하기 전에 초기화되지 않기 때문에 발생합니다. 이는 IOC 설정이 완전히 실행되지 않을 수있는 단위 테스트에서 일반적인 문제입니다 [3].
5. 널 조건부 연산자의 잘못 사용 **
MVVMCross에만 국한되지는 않지만 체인의 중간 물체가 무인 상태 인 경우 Null-Conditional Operator (`?. ')를 잘못 사용하면 NullReferenceExceptions로 이어질 수 있습니다. 중첩 특성에 액세스하기 전에 체인의 모든 부분이 올바르게 초기화되도록하는 것이 중요합니다.
6. 누락 된 기본 클래스 전화 **
MVVMCross 설정 클래스에서는 기본 클래스 메소드를 호출하지 않으면`earnignizelastchance '와 같은) 필요한 구성 요소의 초기화가 불완전 해져서 런타임 중에 널 참조가 발생할 수 있습니다 [1].
nullReferenceExceptions 방지
이러한 예외를 방지하려면 사용하기 전에 모든 객체와 속성이 올바르게 초기화되도록하십시오. IOC 등록이 정확하고 기본 클래스 방법이 필요에 따라 호출되는지 확인하십시오. 또한 Null Checks 및 Null Conditional Operator를 사용하면 NULL 참조를 해제하려는 시도를 피함으로써 이러한 예외를 방지 할 수 있습니다.
인용 :[1] https://stackoverflow.com/questions/18954938/nullreference-exception-during-binding-with-mvvmcross
[2] https://www.site24x7.com/learn/fixing-nullreferenceexception-and-argumentnullexception.html
[3] https://stackoverflow.com/questions/53597908/mvvm-cross-null-references-hen-unit-testing-mxvasynccommand/53618570
[4] https://pvs-studio.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-nullreferenceexcept
[7] https://github.com/mvvmcross/mvvmcross/issues/3115
[8] https://www.mvvmcross.com/documentation/fundamentals/data-binding