我正在开发xamarin的跨平台应用程序。我想在我的共享库中定义多个类,然后使用每个平台的特定于平台的代码来实现它们。这些类将在我的主视图模型中引用,以控制不同的功能(例如,电池电量,wifi,USB摄像头)。这样做的最佳方法是什么?
答案 0 :(得分:0)
在Xamarin中,您可以使用接口来完成此操作。在C#using interfaces中,您定义了一个必须由实现它的任何类来满足的契约。
使用您的示例,我们假设您在共享文件夹中有一个名为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();
}
}
在你的应用程序组合root中,在iOC的帮助下将定义将使用哪个实现。每个平台都将注册它自己的实现。然后在ViewModels中,您将使用ServiceLocator注入或获取已注册的实现。
一般来说,这是Xamarin插件的工作方式。您可以查看github中的DeviceInfo插件代码。
这是一个很好的教程,可以解释有关C# IoC
的更多信息希望这很清楚。