c# – 在Xamarin.Forms中编写设备平台特定的代码 - 代码日志

c# – 在Xamarin.Forms中编写设备平台特定的代码

我有以下Xamarin.Forms.ContentPage类结构

public class MyPage : ContentPage
{
    public MyPage()
    {
        //do work to initialize MyPage 
    }

    public void LogIn(object sender, EventArgs eventArgs)
    {
        bool isAuthenticated = false;
        string accessToken = string.Empty;

        //do work to use authentication API to validate users

        if(isAuthenticated)
        {
            //I would to write device specific code to write to the access token to the device
            //Example of saving the access token to iOS device
            NSUserDefaults.StandardUserDefaults.SetString(accessToken, "AccessToken");

            //Example of saving the access token to Android device
            var prefs = Application.Context.GetSharedPreferences("MySharedPrefs", FileCreationMode.Private);
            var prefsEditor = prefs.Edit();

            prefEditor.PutString("AccessToken", accessToken);
            prefEditor.Commit();
        }
    }
}

我想在MyPage LogIn方法中编写特定于平台的代码,以根据使用我的应用程序的设备操作系统来保存访问令牌。

当用户在其设备上使用我的应用程序时,如何仅运行特定于设备的代码?

这是一种通过依赖注入轻松解决的场景。

在您的共享或PCL代码上具有所需方法的界面,如:

public interface IUserPreferences 
{
    void SetString(string key, string value);
    string GetString(string key);
}

在该界面的App类中有一个属性:

public class App 
{
    public static IUserPreferences UserPreferences { get; private set; }

    public static void Init(IUserPreferences userPreferencesImpl) 
    {
        App.UserPreferences = userPreferencesImpl;
    }

    (...)
}

在目标项目上创建平台特定的实现:

iOS版:

public class iOSUserPreferences : IUserPreferences 
{
    public void SetString(string key, string value)
    {
        NSUserDefaults.StandardUserDefaults.SetString(key, value);
    }

    public string GetString(string key)
    {
        (...)
    }
}

安卓:

public class AndroidUserPreferences : IUserPreferences
{
    public void SetString(string key, string value)
    {
        var prefs = Application.Context.GetSharedPreferences("MySharedPrefs", FileCreationMode.Private);
        var prefsEditor = prefs.Edit();

        prefEditor.PutString(key, value);
        prefEditor.Commit();
    }

    public string GetString(string key)
    {
        (...)
    }
}

然后在每个特定于平台的项目上创建IUserPreferences的实现,并使用App.Init(新的iOSUserPrefernces())和App.Init(新的AndroidUserPrefernces())方法进行设置。

最后,您可以将代码更改为:

public class MyPage : ContentPage
{
    public MyPage()
    {
        //do work to initialize MyPage 
    }

    public void LogIn(object sender, EventArgs eventArgs)
    {
        bool isAuthenticated = false;
        string accessToken = string.Empty;

        //do work to use authentication API to validate users

        if(isAuthenticated)
        {
            App.UserPreferences.SetString("AccessToken", accessToken);
        }
    }
}
http://stackoverflow.com/questions/24251020/write-device-platform-specific-code-in-xamarin-forms

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 在Xamarin.Forms中编写设备平台特定的代码