2017-05-24 6 views
0

나는 xamarin에 크로스 플랫폼 앱을 개발 중이다. 공유 라이브러리에 여러 클래스를 정의하고 각 플랫폼에 대해 플랫폼 특정 코드를 사용하여 구현합니다. 이 클래스들은 메인 뷰 모델에서 다른 기능 (예 : 배터리 수준, wifi, usb 카메라)을 제어하기 위해 참조됩니다. 이 일을하는 가장 좋은 방법은 무엇입니까?Xamarin의 스플릿 클래스 정의

답변

0

Xamarin에서는 인터페이스를 사용하여이를 수행 할 수 있습니다. C#에서는 인터페이스를 구현하는 클래스에 의해 충족되어야하는 계약을 정의합니다.

공유 폴더에 IBatteryService이라는 인터페이스가 있다고 가정 해 보겠습니다.

public interface IBatteryService 
{ 
    double GetBatteryLevel(); 
} 

이 인터페이스는 iOS, Android 및 UWP의 각 플랫폼 프로젝트에서 세 가지 구현으로 제공됩니다. 이러한 구현에는 사용자가 찾고있는 것을 얻기위한 플랫폼 특정 코드가 있습니다.

public class BatteryServiceIOS : IBatteryService 
{ 
    public double GetBatteryLevel() 
    { 
     /// 
     /// iOS code to get the device battery level 
     /// 

     return batteryLevel; 
    } 
} 

ViewModels는 어떤 구현이 사용되고 있는지를 알 수없는 인터페이스를 사용합니다.

public class HomeViewModel 
{ 
    IBatteryService _batteryLevel; 

    public HomeViewModel() 
    { 
     //You will initialize your instance either using DI (Dependency Injection or by using ServiceLocator. 
    } 

    public double GetDeviceBatteryLevel() 
    { 
     // At this moment the VM doesn't know which implementation is used and it actually doesn't care. 
     return _batteryLevel.GetBatteryLevel(); 
    } 
} 

앱 구성 루트에서 iOC의 도움으로 어떤 구현이 사용 될지 정의하게됩니다. 모든 플랫폼이 자체 구현을 등록합니다. 그런 다음 ViewModels에서 ServiceLocator를 사용하여 등록 된 구현을 삽입하거나 가져옵니다.

일반적으로 이것은 Xamarin 플러그인이 작동하는 방식입니다. github의 DeviceInfo 플러그인 코드를 살펴볼 수 있습니다.

여기이 충분히 명확 더

C# IoC에 대한 희망을 설명 좋은 튜토리얼입니다.