跨活动重复使用 azure 移动服务客户端

Re-use azure mobile service client across activities

我一直在使用 Azure 移动服务和 Xamarin Android,但我目前对如何重新使用移动服务客户端感到困惑。我见过的每个 Xamarin Android 示例都使用一个 activity 创建对客户端的新引用。我想创建一次对客户端的引用并在多个活动中重复使用它。

到目前为止,我一直在关注 this tutorial,但对如何使这项工作适用于多项活动有点困惑。我真的不想在整个应用程序中不断创建此客户端的新实例。

这样做的一个动机是我不想在每次引用新客户时都必须重新进行身份验证。理想情况下,我会创建一次客户端,进行身份验证,然后在我的整个活动中重复使用该客户端。

由于我对这些工具的使用经验很少,所以我对这件事不感兴趣,所以任何关于如何执行此操作的指示(或什至不执行此操作以及如何正确执行的原因)都将受到赞赏.

在您的应用程序中,您可以像这样创建静态 class

   public static class AzureMobileService
    {
        /// <summary>
        /// Initializes static members of the <see cref="AzureMobileService"/> class. 
        /// </summary>
        static AzureMobileService()
        {

            Instance = new MobileServiceClient("http://<your url>.azure-mobile.net/", "< you key>")
            {
                SerializerSettings = new MobileServiceJsonSerializerSettings()
                {
                    CamelCasePropertyNames = true
                }
            };
        }

        /// <summary>
        /// Gets or sets the Instance.
        /// </summary>
        /// <value>
        /// The customers service.
        /// </value>
        public static MobileServiceClient Instance { get; set; }
    }

每次你需要它的时候你应该使用

AzureMobileService.Instance

这样无论您在哪个页面,您的客户端实例对于应用程序都是相同的:)

另一种不使用静态 class 的方法是使用 Application class。 Application class 是应用程序的根,在应用程序的整个生命周期中都保留在内存中。

[Application]
public class AppInitializer : Application
{
    private static Context _appContext;

    public MobileServiceClient ServiceClient { get; set; }

    public override void OnCreate()
    {
        base.OnCreate();

        ServiceClient = new MobileServiceClient("http://<your url>.azure-mobile.net/", "< you key>")
        {
            SerializerSettings = new MobileServiceJsonSerializerSettings()
            {
                CamelCasePropertyNames = true
            }
        };
    }

    public static Context GetContext()
    {
        return _appContext;
    }
}

然后在 activity 中你可以这样使用它:

public class MainActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        var appState = (AppInitializer) ApplicationContext;

        //appState.ServiceClient
    }
}