C# Xamarin中的拆分类定义
我正在xamarin中开发一个跨平台应用程序。我想在我的共享库中定义多个类,然后为每个平台使用特定于平台的代码来实现它们。这些类将在我的主视图模型中引用,以控制不同的功能(例如电池电量、wifi、usb摄像头)。做这件事最好的方法是什么?在Xamarin中,您可以利用接口来完成这项工作。在C#中,使用接口定义了任何实现它的类都必须满足的契约 使用您的示例,假设您的共享文件夹中有一个名为C# Xamarin中的拆分类定义,c#,class,xamarin,definition,C#,Class,Xamarin,Definition,我正在xamarin中开发一个跨平台应用程序。我想在我的共享库中定义多个类,然后为每个平台使用特定于平台的代码来实现它们。这些类将在我的主视图模型中引用,以控制不同的功能(例如电池电量、wifi、usb摄像头)。做这件事最好的方法是什么?在Xamarin中,您可以利用接口来完成这项工作。在C#中,使用接口定义了任何实现它的类都必须满足的契约 使用您的示例,假设您的共享文件夹中有一个名为IBatteryService的接口 public interface IBatteryService {
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中查看插件代码
这里有一个很好的教程,它详细解释了
希望这足够清楚