본문 바로가기

Develop/MAUI 가이드

[Xamarin] Xamarin 프로젝트에서 MvvmCross 사용하기

반응형

MvvmCross
MvvmCross

Xamarin 프로젝트에서 MvvmCross 사용하기

MvvmCross 공식 문서 나름 Xamarin.Forms 에서 사용하는 방법을 알려주고 있지만 부족한 점이 많아 추가로 설명드리도록 하겠습니다.

MvvmCross 샘플 중 [MvxForms] 를 참고해보시면 많은 도움이 되실 겁니다. 이 샘플을 기반으로 설명을 드리도록 하겠습니다.

1. MvxApplication 생성

제일 먼저해야 할 일은 MvxApplication 을 상속받아 Serivce 를 등록하고, 시작 ViewModel을 등록하는 작업입니다.

    public class CoreApp : MvxApplication
    {
        public override void Initialize()
        {
            // 모든 클래스 중 이름이 "Service" 로 끝나는 클래스를 모두 Lazy 방식으로 Singleton 을 IoC 내에 생성합니다.
            CreatableTypes()
                .EndingWith("Service")
                .AsInterfaces()
                .RegisterAsLazySingleton();

            // 시작 ViewModel을 등록합니다.
            RegisterAppStart<ViewModels.MvxFormsViewModel>();
        }
    }

2. Droid 프로젝트

먼저 MainActivity.cs 파일을 수정합니다.

    // MvxFormsAppCompatActivity 를 상속받습니다.
    public class MainActivity : MvxFormsAppCompatActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;
        }
    }

MainActivity 는 MvxFormsAppCompatActivity 를 상속받아, MvxApplication 를 호출할 수 있도록 설정해줍니다.
그리고 플랫폼 종속적인 코드도 등록할 수 있도록 Setup.cs 파일을 만듭니다.

파일 이름은 반드시 "Setup.cs" 여야 합니다.

    // MvxFormsAndroidSetup<TApplication, TFormsApplication> 을 상속받습니다.
    public class Setup : MvxFormsAndroidSetup<CoreApp, App>
    {
        // 여기서 플랫폼 종속적인 서비스를 등록할 수 있습니다.
        protected override IMvxIoCProvider InitializeIoC()
        {
            var provider = base.InitializeIoC();
            provider.RegisterType<MvxFroms.Core.IService, DroidService>();
            return provider;
        }
    }

3. iOS 프로젝트

iOS 프로젝트도 Droid 프로젝트와 같은 절차로 수정하시면 됩니다.

먼저, AppDelegate.cs 파일을 수정합니다.

    // MvxFormsApplicationDelegate<TMvxIosSetup, TApplication, TFormsApplication> 를 상속받습니다.
    public partial class AppDelegate : MvxFormsApplicationDelegate<Setup, Core.CoreApp, Core.App> 
    {

    }

Setup.cs 파일을 수정합니다.

    public class Setup : MvxFormsIosSetup<CoreApp, App>
    {
        // 여기서 플랫폼 종속적인 서비스를 등록할 수 있습니다.
        protected override IMvxIoCProvider InitializeIoC()
        {
            var provider = base.InitializeIoC();
            provider.RegisterType<MvxFroms.Core.IService, IOSService>();
            return provider;
        }
    }
반응형