私はxamarinでクロスプラットフォームアプリを開発しています。私は共有ライブラリに複数のクラスを定義したいが、プラットフォームごとにプラットフォーム固有のコードを使用してそれらを実装したい。これらのクラスは、メインビューのモデルで参照され、さまざまな機能(バッテリーレベル、Wi-Fi、USBカメラなど)を制御します。これを行う最善の方法は何ですか?分割クラス定義はXamarinで
0
A
答えて
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についての希望を説明する良いチュートリアルです。
関連する問題
- 1. 分割までのクラス定義を
- 2. Xamarinフォームの分割ビュー
- 3. 定義済みの割合でパンダでDataFrameを分割する方法は?
- 4. は、クラス定義
- 5. C++ではクラス定義
- 6. xamarin mac app vstsビルド定義
- 7. クラス定義は、ドキュメント
- 8. サブパスにパスで定義された分割形状
- 9. 定義された記号で文字列を分割 - 特に「(」
- 10. Xamarinフォームでxmlnsを定義する
- 11. PHPをクラス分割する
- 12. エラー:クラスの再定義やC++でクラスの以前の定義
- 13. Javaでクラス定義と宣言のファイルを分離
- 14. 未定義クラス
- 15. C++クラス定義
- 16. 関数定義とクラス定義の違いは何ですか
- 17. C++は、宣言と定義の間でデフォルトのパラメータ値を分割します
- 18. クラス - 関数定義はパラメータ
- 19. 同じヘッダに定義されたクラスの定義を複数のソースファイルに分割することはできますか?
- 20. コード分割とサーバーサイドレンダリング(リアクションが定義されていません)
- 21. AIrflow - 複数ファイルにわたるDAG定義の分割
- 22. Typescript:定義を別々のファイルに分割する方法
- 23. ロールバーの定義されていないメソッド分割
- 24. Vim:youCompletemeプラグインが関数定義の分割ウィンドウを開きます
- 25. ファイル入力用の手動分割アルゴリズムの定義
- 26. TypeScript定義のクラスにBreeze.Entityを割り当てます。
- 27. 分割特定Characer
- 28. VS2017 Xamarinで 'designer'と 'source'ウィンドウを分割しますか?
- 29. クラス定義外のテンプレート定義
- 30. はPerl 6でユーザー定義クラスに