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

时间:2015-01-30 03:04:41

标签: c# xamarin xamarin.android azure-mobile-services

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

到目前为止,我已经关注了this tutorial,但我对如何为多项活动开展这项工作感到困惑。我真的不想在整个应用程序中继续创建此客户端的新实例。

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

由于我没有使用这些工具的经验,因此我不会参与这个工具,所以任何有关如何执行此操作的指示(甚至是不执行此操作以及如何正确执行此操作的原因)都表示赞赏

2 个答案:

答案 0 :(得分:0)

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



   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; }
    }
&#13;
&#13;
&#13;

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

&#13;
&#13;
AzureMobileService.Instance
&#13;
&#13;
&#13;

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

答案 1 :(得分:0)

A different method instead of using a static class is to use an Application class. The Application class is the root of the app and stays in memory throughout the app's life cycle.

[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;
    }
}

Then inside an activity you can use it like this:

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

        var appState = (AppInitializer) ApplicationContext;

        //appState.ServiceClient
    }
}