Управление конфигурацией

Примечание.

Эта электронная книга была опубликована весной 2017 года и с тех пор не была обновлена. Есть много в книге, которая остается ценным, но некоторые из материалов устарели.

Параметры разрешить разделение данных, которые настраивают поведение приложения из кода, что позволяет изменять поведение без перестроения приложения. Существует два типа параметров: параметры приложения и параметры пользователя.

Параметры приложения — это данные, которые приложение создает и управляет ими. Она может включать такие данные, как фиксированные конечные точки веб-службы, ключи API и состояние среды выполнения. Параметры приложения привязаны к существованию приложения и имеют смысл только для этого приложения.

Пользовательские параметры — это настраиваемые параметры приложения, которые влияют на поведение приложения и не требуют частой повторной корректировки. Например, приложение может позволить пользователю указать, откуда извлекать данные и как его отображать на экране.

Xamarin.Forms содержит постоянный словарь, который можно использовать для хранения данных параметров. К этому словарю можно получить доступ с помощью Application.Current.Properties свойства, и все данные, помещенные в него, сохраняются при переходе приложения в состояние сна и восстанавливается при возобновлении или запуске приложения. Кроме того, класс Application также имеет SavePropertiesAsync метод, позволяющий приложению сохранять свои параметры при необходимости. Дополнительные сведения об этом словаре см. в разделе "Словарь свойств".

Недостатком хранения данных с помощью постоянного Xamarin.Forms словаря является то, что данные не легко привязаны. Поэтому мобильное приложение eShopOnContainers использует подключаемые модули Xam.Plugins. библиотека Параметры, доступная из NuGet. Эта библиотека обеспечивает согласованный, типобезопасный кроссплатформенный подход для сохранения и получения параметров приложения и пользователя при использовании управления собственными параметрами, предоставляемыми каждой платформой. Кроме того, проще использовать привязку данных для доступа к данным параметров, предоставляемым библиотекой.

Примечание.

В то время как Xam.Plugin. Параметры библиотека может хранить как параметры приложения, так и пользователей, но не имеет различий между этими двумя.

Создание класса Параметры

При использовании Xam.Plugins. Параметры библиотеку необходимо создать один статический класс, содержащий параметры приложения и пользователя, необходимые приложению. В следующем примере кода показан класс Параметры в мобильном приложении eShopOnContainers:

public static class Settings  
{  
    private static ISettings AppSettings  
    {  
        get  
        {  
            return CrossSettings.Current;  
        }  
    }  
    ...  
}

Параметры можно читать и записывать с помощью ISettings API, предоставляемый Xam.Plugins. библиотека Параметры. Эта библиотека предоставляет одноэлементный объект, который можно использовать для доступа к API, CrossSettings.Currentа класс параметров приложения должен предоставлять этот одноэлементный объект через ISettings свойство.

Примечание.

Использование директив для подключаемого модуля. Параметры и подключаемый модуль. Параметры. Пространства имен абстракций следует добавить в класс, требующий доступа к Xam.Plugins. Параметры типы библиотек.

Добавление параметра

Каждый параметр состоит из ключа, значения по умолчанию и свойства. В следующем примере кода показаны все три элемента для параметра пользователя, представляющего базовый URL-адрес для веб-службы, к которому подключается мобильное приложение eShopOnContainers:

public static class Settings  
{  
    ...  
    private const string IdUrlBase = "url_base";  
    private static readonly string UrlBaseDefault = GlobalSetting.Instance.BaseEndpoint;  
    ...  

    public static string UrlBase  
    {  
        get  
        {  
            return AppSettings.GetValueOrDefault<string>(IdUrlBase, UrlBaseDefault);  
        }  
        set  
        {  
            AppSettings.AddOrUpdateValue<string>(IdUrlBase, value);  
        }  
    }  
}

Ключ всегда является строкой константы, определяющей имя ключа, с значением по умолчанию для параметра, являющегося статическим значением для чтения требуемого типа. Предоставление значения по умолчанию гарантирует, что допустимое значение доступно при извлечении неустановленного параметра.

UrlBase Статическое свойство использует два метода из ISettings API для чтения или записи значения параметра. Метод ISettings.GetValueOrDefault используется для получения значения параметра из хранилища для конкретной платформы. Если для параметра не определено значение, его значение по умолчанию извлекается. Аналогичным образом ISettings.AddOrUpdateValue метод используется для сохранения значения параметра в хранилище, зависящее от платформы.

Вместо того чтобы определить значение по умолчанию внутри Settings класса, UrlBaseDefault строка получает его значение из GlobalSetting класса. В следующем примере кода показано BaseEndpoint свойство и UpdateEndpoint метод в этом классе:

public class GlobalSetting  
{  
    ...  
    public string BaseEndpoint  
    {  
        get { return _baseEndpoint; }  
        set  
        {  
            _baseEndpoint = value;  
            UpdateEndpoint(_baseEndpoint);  
        }  
    }  
    ...  

    private void UpdateEndpoint(string baseEndpoint)  
    {  
        RegisterWebsite = string.Format("{0}:5105/Account/Register", baseEndpoint);  
        CatalogEndpoint = string.Format("{0}:5101", baseEndpoint);  
        OrdersEndpoint = string.Format("{0}:5102", baseEndpoint);  
        BasketEndpoint = string.Format("{0}:5103", baseEndpoint);  
        IdentityEndpoint = string.Format("{0}:5105/connect/authorize", baseEndpoint);  
        UserInfoEndpoint = string.Format("{0}:5105/connect/userinfo", baseEndpoint);  
        TokenEndpoint = string.Format("{0}:5105/connect/token", baseEndpoint);  
        LogoutEndpoint = string.Format("{0}:5105/connect/endsession", baseEndpoint);  
        IdentityCallback = string.Format("{0}:5105/xamarincallback", baseEndpoint);  
        LogoutCallback = string.Format("{0}:5105/Account/Redirecting", baseEndpoint);  
    }  
}

Каждый раз, когда BaseEndpoint свойство задано, UpdateEndpoint вызывается метод. Этот метод обновляет ряд свойств, все из которых основаны на UrlBase параметре пользователя, предоставленном Settings классом, который представляет разные конечные точки, к которым подключается мобильное приложение eShopOnContainers.

Привязка данных к Параметры пользователя

В мобильном приложении eShopOnContainers предоставляется SettingsView два параметра пользователя. Эти параметры позволяют настроить, следует ли приложению извлекать данные из микрослужб, развернутых как контейнеры Docker, или же приложение должно получать данные из макетных служб, которые не требуют подключения к Интернету. При выборе получения данных из контейнерных микрослужб необходимо указать URL-адрес базовой конечной точки для микрослужб. На рисунке 7-1 показано, SettingsView когда пользователь выбрал получение данных из контейнерных микрослужб.

User settings exposed by the eShopOnContainers mobile app

Рис. 7-1. Параметры пользователя, предоставляемые мобильным приложением eShopOnContainers

Привязка данных может использоваться для извлечения и задания параметров, предоставляемых классом Settings . Это достигается элементами управления в привязке представления для просмотра свойств модели, которые, в свою очередь, получают доступ к свойствам класса Settings , и вызывает уведомление об изменении свойства, если значение параметров изменилось. Дополнительные сведения о создании моделей представления мобильных приложений eShopOnContainers и их связывании с представлениями см. в статье "Автоматическое создание модели представления с помощью указателя модели представления".

В следующем примере кода показан Entry элемент управления, SettingsView который позволяет пользователю ввести URL-адрес базовой конечной точки для контейнерных микрослужб:

<Entry Text="{Binding Endpoint, Mode=TwoWay}" />

Этот Entry элемент управления привязывается к Endpoint свойству класса с помощью двусторонней SettingsViewModel привязки. В следующем примере кода показано свойство Endpoint:

public string Endpoint  
{  
    get { return _endpoint; }  
    set  
    {  
        _endpoint = value;  

        if(!string.IsNullOrEmpty(_endpoint))  
        {  
            UpdateEndpoint(_endpoint);  
        }  

        RaisePropertyChanged(() => Endpoint);  
    }  
}

Endpoint Если свойство заданоUpdateEndpoint, вызывается метод, при условии, что указанное значение допустимо, а уведомление об изменении свойства вызывается. Метод UpdateEndpoint показан в следующем примере кода:

private void UpdateEndpoint(string endpoint)  
{  
    Settings.UrlBase = endpoint;  
}

Этот метод обновляет UrlBase свойство в Settings классе со значением URL-адреса базовой конечной точки, введенным пользователем, что приводит к тому, что оно сохраняется в хранилище для конкретной платформы.

SettingsView При переходе InitializeAsync метод в SettingsViewModel классе выполняется. Этот метод показан в следующем примере кода:

public override Task InitializeAsync(object navigationData)  
{  
    ...  
    Endpoint = Settings.UrlBase;  
    ...  
}

Метод задает свойству Endpoint значение UrlBase свойства в Settings классе. UrlBase Доступ к свойству приводит к тому, что библиотека Xam.Plugins.Параметры извлекает значение параметров из хранилища для конкретной платформы. Сведения о том, как InitializeAsync вызывается метод, см. в разделе "Передача параметров во время навигации".

Этот механизм гарантирует, что каждый раз, когда пользователь переходит в Параметры View, параметры пользователя извлекаются из хранилища для конкретной платформы и передаются с помощью привязки данных. Затем, если пользователь изменяет значения параметров, привязка данных гарантирует, что они немедленно сохраняются обратно в хранилище для конкретной платформы.

Итоги

Параметры разрешить разделение данных, которые настраивают поведение приложения из кода, что позволяет изменять поведение без перестроения приложения. Параметры приложения — это данные, которые приложение создает и управляет ими, а пользовательские параметры — это настраиваемые параметры приложения, которые влияют на поведение приложения и не требуют частой повторной корректировки.

Подключаемые модули Xam.Plugin. Параметры библиотека обеспечивает согласованный, типобезопасный, кроссплатформенный подход для сохранения и извлечения параметров приложения и пользователя, а привязка данных может использоваться для доступа к параметрам, созданным с помощью библиотеки.