Управление конфигурацией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 включает в себя постоянные словарь, который может использоваться для хранения данных параметров.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 использует библиотеку Xam.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.

Примечание

Хотя Xam.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

При использовании библиотеки Xam.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. В следующем примере кода показан класс параметры в мобильном приложении 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, предоставляемый библиотеке Xam.Plugins.Settings.Settings can be read and written through the ISettings API, which is provided by the Xam.Plugins.Settings library. Эта библиотека предоставляет одноэлементным. он может использоваться для доступа к API, CrossSettings.Current, и класса параметров приложения должны предоставлять этом единственном экземпляре через 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.Abstractions должны быть добавлены к классу, который требуется доступ к типам Xam.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);  
        }  
    }  
}

Ключ является всегда const строка, определяющая имя ключа, значением по умолчанию для параметра статического только для чтения значение требуемого типа.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 Статическое свойство с помощью двух методов из 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.

Рис. 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 создает представление модели и связывает их с представлениями, см. в разделе автоматическое создание модели представления с указателем модели представления.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. В следующем примере кода показано свойство конечной точки: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 вызывает библиотеку Xam.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.

Этот механизм гарантирует, что каждый раз, когда пользователь переходит к SettingsView, параметры пользователя извлекаются из хранилища с платформой и представить с помощью привязки данных.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.

Библиотека Xam.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.