2017-05-24 7 views
0

私はxamarinでクロスプラットフォームアプリを開発しています。私は共有ライブラリに複数のクラスを定義したいが、プラットフォームごとにプラットフォーム固有のコードを使用してそれらを実装したい。これらのクラスは、メインビューのモデルで参照され、さまざまな機能(バッテリーレベル、Wi-Fi、USBカメラなど)を制御します。これを行う最善の方法は何ですか?分割クラス定義はXamarinで

答えて

0

Xamarinでは、インターフェイスを使用してこれを実現できます。 C#では、インターフェイスを使用して、それを実装するクラスによって満たされなければならないコントラクトを定義します。

例を使用して、共有フォルダにIBatteryServiceという名前のインターフェイスがあるとします。

public interface IBatteryService 
{ 
    double GetBatteryLevel(); 
} 

iOS、Android、UWPの各プラットフォームプロジェクトでは、このインターフェイスの3つの実装が用意されています。これらの実装は、あなたが探しているものを得るためのプラットフォーム固有のコードを持っています。

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についての希望を説明する良いチュートリアルです。

関連する問題