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