在Xamarin中拆分类定义

时间:2017-05-24 02:00:13

标签: c# class xamarin definition

我正在开发xamarin的跨平台应用程序。我想在我的共享库中定义多个类,然后使用每个平台的特定于平台的代码来实现它们。这些类将在我的主视图模型中引用,以控制不同的功能(例如,电池电量,wifi,USB摄像头)。这样做的最佳方法是什么?

1 个答案:

答案 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

的更多信息

希望这很清楚。