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

Параметры позволяют разделить данные, которые настраивают поведение приложения из кода, позволяя изменять поведение без перестроения приложения.Settings allow the separation of data that configures the behavior of an app from the code, allowing the behavior to be changed without rebuilding the app. Существует два типа параметров: параметры приложения и параметры пользователя.There are two types of settings: app settings, and user settings.

Параметры приложения — это данные, создаваемые и управляемые приложением.App settings are data that an app creates and manages. Сюда могут входить такие данные, как фиксированные конечные точки веб-служб, ключи API и состояние среды выполнения.It can include data such as fixed web service endpoints, API keys, and runtime state. Параметры приложения привязаны к существованию приложения и имеют смысл только для этого приложения.App settings are tied to the existence of the app and are only meaningful to that app.

Пользовательские параметры — это настраиваемые параметры приложения, которые влияют на поведение приложения и не нуждаются в частой повторной настройке.User settings are the customizable settings of an app that affect the behavior of the app and don't require frequent re-adjustment. Например, приложение может позволить пользователю указать, откуда получать данные, и как отобразить их на экране.For example, an app might let the user specify where to retrieve data from, and how to display it on the screen.

Xamarin.Formsвключает постоянный словарь, который можно использовать для хранения данных параметров. includes a persistent dictionary that can be used to store settings data. Доступ к этому словарю можно получить с помощью Application.Current.Properties свойства, и все данные, помещаемые в него, сохраняются при переходе приложения в спящий режим и восстанавливаются при возобновлении работы приложения или повторном запуске.This dictionary can be accessed using the Application.Current.Properties property, and any data that's placed into it is saved when the app goes into a sleep state, and is restored when the app resumes or starts up again. Кроме Application того, класс также имеет SavePropertiesAsync метод, который позволяет приложению сохранять параметры при необходимости.In addition, the Application class also has a SavePropertiesAsync method that allows an app to have its settings saved when required. Дополнительные сведения об этом словаре см. в разделе словарь свойств.For more information about this dictionary, see Properties Dictionary.

Недостаток хранения данных с помощью Xamarin.Forms постоянного словаря заключается в том, что данные не привязаны к данным.A downside to storing data using the Xamarin.Forms persistent dictionary is that it's not easily data bound to. Таким образом, мобильное приложение eShopOnContainers использует библиотеку Ксам. plugins. Settings, доступную в NuGet.Therefore, the eShopOnContainers mobile app uses the Xam.Plugins.Settings library, available from NuGet. Эта библиотека предоставляет единообразный, строго типизированный и кросс-платформенный подход к сохранению и извлечению параметров приложений и пользователей, а также использование управления собственными параметрами, предоставляемых каждой платформой.This library provides a consistent, type-safe, cross-platform approach for persisting and retrieving app and user settings, while using the native settings management provided by each platform. Кроме того, можно легко использовать привязку данных для доступа к данным параметров, предоставляемым библиотекой.In addition, it's straightforward to use data binding to access settings data exposed by the library.

Примечание

Хотя в библиотеке Ксам. plugin. Settings можно хранить параметры приложения и пользователя, они не имеют различий между ними.While the Xam.Plugin.Settings library can store both app and user settings, it makes no distinction between the two.

Создание класса параметровCreating a Settings Class

При использовании библиотеки Ксам. plugins. Settings необходимо создать один статический класс, который будет содержать приложения и пользовательские параметры, необходимые для приложения.When using the Xam.Plugins.Settings library, a single static class should be created that will contain the app and user settings required by the app. В следующем примере кода показан класс Settings в мобильном приложении eShopOnContainers:The following code example shows the Settings class in the eShopOnContainers mobile app:

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

Параметры можно считывать и записывать с помощью ISettings API, который предоставляется библиотекой ксам. plugins. Settings.Settings can be read and written through the ISettings API, which is provided by the Xam.Plugins.Settings library. Эта библиотека предоставляет одноэлементный экземпляр, который можно использовать для доступа к API, CrossSettings.Current и класс параметров приложения должен предоставлять этот Singleton через ISettings свойство.This library provides a singleton that can be used to access the API, CrossSettings.Current, and an app's settings class should expose this singleton via an ISettings property.

Примечание

Директивы using для пространств имен plugin. Settings и plugin. Settings. абстракции следует добавлять в класс, который требует доступа к типам библиотек Ксам. plugins. Settings.Using directives for the Plugin.Settings and Plugin.Settings.Abstractions namespaces should be added to a class that requires access to the Xam.Plugins.Settings library types.

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

Каждый параметр состоит из ключа, значения по умолчанию и свойства.Each setting consists of a key, a default value, and a property. В следующем примере кода показаны все три элемента для параметра пользователя, представляющего базовый URL-адрес для веб-службы, к которому подключается мобильное приложение eShopOnContainers.The following code example shows all three items for a user setting that represents the base URL for the online services that the eShopOnContainers mobile app connects to:

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

Ключ всегда является строкой константы, определяющей имя ключа, и значением по умолчанию для параметра, которое является статическим значением ReadOnly требуемого типа.The key is always a const string that defines the key name, with the default value for the setting being a static readonly value of the required type. Предоставление значения по умолчанию гарантирует доступность допустимого значения при извлечении неопределенного параметра.Providing a default value ensures that a valid value is available if an unset setting is retrieved.

UrlBaseСвойство static использует два метода из ISettings API для чтения или записи значения параметра.The UrlBase static property uses two methods from the ISettings API to read or write the setting value. ISettings.GetValueOrDefaultМетод используется для получения значения параметра из хранилища, зависящего от платформы.The ISettings.GetValueOrDefault method is used to retrieve a setting's value from platform-specific storage. Если для параметра не определено значение, вместо него извлекается значение по умолчанию.If no value is defined for the setting, its default value is retrieved instead. Аналогичным образом ISettings.AddOrUpdateValue метод используется для сохранения значения параметра в хранилище, зависящее от платформы.Similarly, the ISettings.AddOrUpdateValue method is used to persist a setting's value to platform-specific storage.

Вместо того, чтобы определить значение по умолчанию внутри Settings класса, UrlBaseDefault строка получает свое значение из GlobalSetting класса.Rather that define a default value inside the Settings class, the UrlBaseDefault string obtains its value from the GlobalSetting class. В следующем примере кода показано BaseEndpoint свойство и UpdateEndpoint метод в этом классе:The following code example shows the BaseEndpoint property and UpdateEndpoint method in this class:

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 вызывается метод.Each time the BaseEndpoint property is set, the UpdateEndpoint method is called. Этот метод обновляет ряд свойств, все из которых основаны на UrlBase пользовательском параметре, предоставляемом Settings классом, который представляет различные конечные точки, к которым подключается мобильное приложение eShopOnContainers.This method updates a series of properties, all of which are based on the UrlBase user setting that's provided by the Settings class that represent different endpoints that the eShopOnContainers mobile app connects to.

Привязка данных к параметрам пользователяData Binding to User Settings

В мобильном приложении eShopOnContainers SettingsView предоставляет два пользовательских параметра.In the eShopOnContainers mobile app, the SettingsView exposes two user settings. Эти параметры позволяют настроить, следует ли приложению получать данные из микрослужб, развернутых в виде контейнеров DOCKER, или должно ли приложение получать данные из служб макетирования, не требующих подключения к Интернету.These settings allow configuration of whether the app should retrieve data from microservices that are deployed as Docker containers, or whether the app should retrieve data from mock services that don't require an internet connection. При выборе извлечения данных из контейнерных микрослужб необходимо указать URL-адрес базовой конечной точки для микрослужб.When choosing to retrieve data from containerized microservices, a base endpoint URL for the microservices must be specified. На рис. 7-1 показано, SettingsView когда пользователь выбрал извлечение данных из контейнерных микрослужб.Figure 7-1 shows the SettingsView when the user has chosen to retrieve data from containerized microservices.

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

Рис. 7-1. пользовательские параметры, предоставляемые мобильным приложением eShopOnContainersFigure 7-1: User settings exposed by the eShopOnContainers mobile app

Привязку данных можно использовать для получения и установки параметров, предоставляемых Settings классом.Data binding can be used to retrieve and set settings exposed by the Settings class. Это достигается с помощью элементов управления в привязке представления для просмотра свойств модели, которые, в свою очередь, имеют доступ к свойствам в Settings классе, и создания уведомления об изменении свойства, если значение параметров изменилось.This is achieved by controls on the view binding to view model properties that in turn access properties in the Settings class, and raising a property changed notification if the settings value has changed. Сведения о том, как конструкция eShopOnContainers Mobile App конструирует модели и связывает их с представлениями, см. в разделе Автоматическое создание модели представления с указателем модели представления.For information about how the eShopOnContainers mobile app constructs view models and associates them to views, see Automatically Creating a View Model with a View Model Locator.

В следующем примере кода показан Entry элемент управления из SettingsView , который позволяет пользователю ввести URL-адрес базовой конечной точки для контейнерных микрослужб:The following code example shows the Entry control from the SettingsView that allows the user to enter a base endpoint URL for the containerized microservices:

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

Этот Entry элемент управления привязывается к Endpoint свойству SettingsViewModel класса с помощью двусторонней привязки.This Entry control binds to the Endpoint property of the SettingsViewModel class, using a two-way binding. В следующем примере кода показано свойство Endpoint:The following code example shows the Endpoint property:

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

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

        RaisePropertyChanged(() => Endpoint);  
    }  
}

Если Endpoint свойство задано UpdateEndpoint , вызывается метод при условии, что предоставленное значение является допустимым, и вызывается уведомление об изменении свойства.When the Endpoint property is set the UpdateEndpoint method is called, provided that the supplied value is valid, and property changed notification is raised. Метод UpdateEndpoint показан в следующем примере кода:The following code example shows the UpdateEndpoint method:

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

Этот метод обновляет UrlBase свойство в классе, Settings используя значение URL-адреса базовой конечной точки, указанное пользователем, что приводит к его сохранению в хранилище, зависящем от платформы.This method updates the UrlBase property in the Settings class with the base endpoint URL value entered by the user, which causes it to be persisted to platform-specific storage.

При SettingsView переходе к выполняется InitializeAsync метод в SettingsViewModel классе.When the SettingsView is navigated to, the InitializeAsync method in the SettingsViewModel class is executed. Этот метод показан в следующем примере кода:The following code example shows this method:

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

Метод задает Endpoint для свойства значение UrlBase свойства в Settings классе.The method sets the Endpoint property to the value of the UrlBase property in the Settings class. Обращение к UrlBase свойству приводит к тому, что библиотека ксам. plugins. Settings извлекает значение параметров из хранилища, зависящего от платформы.Accessing the UrlBase property causes the Xam.Plugins.Settings library to retrieve the settings value from platform-specific storage. Сведения о том, как InitializeAsync вызывается метод, см. в разделе Передача параметров во время навигации.For information about how the InitializeAsync method is invoked, see Passing Parameters During Navigation.

Этот механизм гарантирует, что каждый раз, когда пользователь переходит в Сеттингсвиев, пользовательские параметры извлекаются из хранилища, зависящего от платформы, и представляются с помощью привязки данных.This mechanism ensures that whenever a user navigates to the SettingsView, user settings are retrieved from platform-specific storage and presented through data binding. Затем, если пользователь изменяет значения параметров, привязка данных гарантирует, что они будут немедленно сохранены в хранилище для конкретной платформы.Then, if the user changes the settings values, data binding ensures that they are immediately persisted back to platform-specific storage.

СводкаSummary

Параметры позволяют разделить данные, которые настраивают поведение приложения из кода, позволяя изменять поведение без перестроения приложения.Settings allow the separation of data that configures the behavior of an app from the code, allowing the behavior to be changed without rebuilding the app. Параметры приложения — это данные, создаваемые и управляемые приложением, а пользовательские параметры — это настраиваемые параметры приложения, которые влияют на поведение приложения и не нуждаются в частой повторной настройке.App settings are data that an app creates and manages, and user settings are the customizable settings of an app that affect the behavior of the app and don't require frequent re-adjustment.

Библиотека Ксам. plugins. Settings предоставляет единообразный, строго типизированный и кросс-платформенный подход к сохранению и извлечению параметров приложений и пользователей, а привязка данных может использоваться для доступа к параметрам, созданным с помощью библиотеки.The Xam.Plugins.Settings library provides a consistent, type-safe, cross-platform approach for persisting and retrieving app and user settings, and data binding can be used to access settings created with the library.