MVVMCross는 객체 구성 중, 특히 'MVX.iocProvider` Singleton 인스턴스에 의해 관리되는 IOC (Control) 컨테이너를 통해 반사를 광범위하게 활용합니다. 다음은 MVMCROSS가 객체 구성 중 반사를 처리하는 방법에 대한 자세한 개요입니다.
생성자 주입
MVVMCross는 생성자 주입을 지원하여 반사를 사용하여 객체 구성 중에 매개 변수를 자동으로 해결할 수 있습니다. 객체를 만들 때 MVVMCross는 다음 단계를 수행합니다.
1. 반사 생성자를 찾기위한 반사 : MVVMCross는 반사를 사용하여 인스턴스화되는 클래스의 생성자를 식별합니다.
2. 매개 변수 해상도 : 생성자가 요구하는 매개 변수를 검사하고 필요한 인터페이스 또는 유형을 식별합니다.
3. 등록 된 구현 해결 : 각 매개 변수에 대해 MVVMCross는`mvx.iocprovider.resolve ()`를 사용하여 인터페이스 또는 유형에 대한 등록 된 구현을 얻습니다.
4. 생성자 호출 : 모든 매개 변수가 해결되면 MVVMCross는 반사를 사용하여 분해 된 매개 변수로 생성자를 호출합니다.
이 과정은 재귀 적이며, 즉 해결 된 객체 중 하나에 다른 객체가 필요한 경우 MVMCross도 그 것들을 해결합니다 [1] [4].
컨벤션별 벌크 등록
MVVMCross는 또한 반사를 사용하여 클래스의 대량 등록을 지원합니다. 이것은 일반적으로`mvxapplication '에서 상속되는`app` 클래스에서 수행됩니다. 이 프레임 워크는 반사를 사용하여 "서비스"로 끝나는 핵심 어셈블리의 모든 클래스를 찾아 게으른 싱글 톤으로 등록합니다. 이것은 다음 단계를 통해 달성됩니다.
1. "서비스"로 끝나는 클래스 찾기 : 반사는 핵심 어셈블리 내에서 "서비스"에서 이름이 끝나는 모든 클래스를 찾는 데 사용됩니다.
2. 인터페이스 식별 : 찾은 각 클래스에 대해 MVMCROSS는 IT가 구현되는 인터페이스를 식별합니다.
3. 게으른 싱글 톤으로 등록하십시오 :이 클래스는 각 인터페이스에 대해 게으른 싱글 톤으로 등록됩니다. 이것은 그들이 처음 요청 될 때까지 인스턴스화되지 않음을 의미한다 [2] [4] [7].
뷰 모델 및 종속성 주입
MVVMCross는 뷰 모델에 동일한 생성자 주입 메커니즘을 사용합니다. ViewModel을 만들 때 MVVMCross는 IOC 컨테이너를 사용하여 생성자에 지정된 모든 종속성을 해결합니다. 이를 통해 다양한 플랫폼에서 서비스를 쉽게 사용자 정의 할 수 있으며 모의 구현을 사용하여 장치 테스트를 용이하게합니다 [1] [4].
사용자 정의 및 AppStart
`App '클래스는 IOC 컨테이너에 사용자 정의 객체를 등록하고 응용 프로그램의 뷰 모델을 시작하는 일을 담당합니다. 필요한 경우 사용자 정의 'AppStart` 클래스를 사용하여 첫 번째 뷰 모델을 결정하여 시작 프로세스를 사용자 정의 할 수 있습니다 [2] [7].
요약하면, MVVMCross는 반사를 활용하여 객체 구성 중에 종속성을 해결하는 프로세스를 자동화하여 복잡한 객체 그래프를보다 쉽게 관리하고 최소한의 플랫폼 별 코드로 크로스 플랫폼 개발을 지원할 수 있습니다.
인용 :[1] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcross handbook/using-mvvmcross-to-create-your-first-xamarin-app/creating-the-core-project/adding-an-appclass
[3] http://wojosoftware.com/software/mvvmcross/
[4] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[5] https://www.codeproject.com/articles/863695/introduction-to-mvvmcross-platform
[6] https://github.com/media-tools/sqlite-net-extensions
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[10] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup