MVVMCross의 생성자 주입은 크로스 플랫폼 응용 프로그램의 개발 및 유지 보수를 향상시키는 몇 가지 주요 이점을 제공합니다. 이 맥락에서 생성자 주입을 사용하는 것의 상세한 장점은 다음과 같습니다.
1. 분리 및 테스트 가능성 **
생성자 주입은 응용 프로그램의 다른 구성 요소간에 우려 사항을 명확하게 분리 할 수 있습니다. 생성자를 통해 종속성을 주입하면 테스트 목적으로 구현을 쉽게 교체 할 수 있습니다. 이를 통해 모의 서비스 구현을 제공하여 단위 테스트를 작성하는 것이 더 간단합니다. 이는 강력하고 신뢰할 수있는 코드베이스를 유지하는 데 중요합니다 [2] [4].2. 플랫폼 별 구현 **
MVVMCross를 사용하면 생성자 주입을 통한 플랫폼 별 구현을 사용할 수 있습니다. 예를 들어, 카메라와 상호 작용하는 서비스가있는 경우 Android 및 iOS에 대해 다른 구현을 제공 할 수 있습니다. 이 유연성은 특히 다른 플랫폼이 특정 기능의 고유 한 취급을 요구할 수있는 크로스 플랫폼 개발에 특히 유용합니다 [3] [6].3. 종속성 해상도 **
MVVMCross는 객체 구성 중에 종속성을 자동으로 해결하는 강력한 IOC 컨테이너 (`mvx.iocprovider`)를 사용합니다. 이는 뷰 모델 또는 서비스가 인스턴스화 될 때 MVVMCross는 필요한 종속성을 자동으로 제공하여 수동 인스턴스화의 필요성을 줄이고 코드를보다 간결하고 유지 관리 가능하게합니다 [1] [2].4. 종속성 관리의 유연성 **
생성자 주입을 통해 유연한 방식으로 종속성을 관리 할 수 있습니다. 서비스를 싱글 톤, 동적 인스턴스로 등록하거나 다른 수명주기 관리 전략을 사용할 수 있습니다. 이 유연성은 다른 관리 접근법이 필요할 수있는 다른 유형의 종속성을 다룰 때 유리합니다 [2] [3].5. 단순화 된 코드 구조 **
생성자 주입을 사용하면 코드를 핵심 논리에 정리하고 집중할 수 있습니다. 주입 메커니즘은 의존성의 인스턴스화와 제공을 처리하여 클래스의 구조를 단순화하고 이해하고 유지하기가 더 쉬워집니다 [4] [7].6. 향상된 재사용 **
생성자 주입은 응용 프로그램의 다른 부분에서 구성 요소를 쉽게 재사용 할 수 있도록하여 재사용 성을 촉진합니다. 의존성은 하드 코드가 아닌 주입되기 때문에 구성 요소는 다른 맥락에 더 모듈화되고 적응력이 높아집니다 [5] [7].요약하면, MVVMCross의 생성자 주입은 디커플링, 테스트 가능성, 유연성 및 재사용 성을 촉진하여 개발 프로세스를 향상시켜 강력하고 유지 관리 가능한 크로스 플랫폼 응용 프로그램을 구축하기위한 강력한 도구입니다.
인용 :[1] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[2] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[3] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[4] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[5] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[6] https://stackoverflow.com/questions/45618740/how-to-use-ioc-constructor-injection-mvmcross-mvvmcross-platform-exceptions-m
[7] https://yanxiaodi.gitbook.io/xamarin-mvvmcross handbook/using-mvvmcross-to-create-your-first-xamarin-app/adding-an-appclass
[8] https://stackoverflow.com/questions/40737720/constructor-injection-vs-field-injection
[9] https://github.com/mvvmcross/mvvmcross/issues/3586