Конфигурация приложения

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

Общие сведения о конфигурации в Blazor Hybrid

Для конфигурации приложения Blazor Hybrid мы можем использовать следующие источники конфигурации:

  1. JSON-файлы,
  2. объекты .NET в памяти;
  3. пользовательские поставщики конфигурации;

В терминах C# каждый источник конфигурации представлен в ASP.NET Core классом, реализующим интерфейс IConfigurationSource.

Под каждый вид источника конфигурации используются готовые или разрабатываются собственные поставщики конфигурации (наследники класса ConfigurationProvider), в которых все настройки приложения хранятся в парах вида «ключ-значение». При этом работа с настройками приложения ASP.NET Core построена таким образом, что нам, в большинстве случаев, не требуется знать ни источник конфигурации, ни то, какой провайдер конфигурации был задействован для получения той или иной настройки приложения.

Для работы с источниками и провайдерами конфигурации в Blazor Hybrid используется свойство Configuration объекта MauiAppBuilder. Это свойство представлено объектом типа ConfigurationManagerКласс ConfigurationManager реализует сразу ряд интерфейсов и его описание выглядит следующим образом:

public sealed class ConfigurationManager : IDisposable, IConfigurationManager, IConfigurationRoot

В свою очередь, если посмотреть на интерфейсы IConfigurationManager и IConfigurationRoot, то можно увидеть, что эти интерфейсы наследуются от других интерфейсов, таких как IConfiguration и IConfigurationBuilder. Рассмотрим кратко то, какие свойства и методы предоставляют эти интерфейсы.

Интерфейс IConfiguration

Этот интерфейс предоставляет доступ к набору свойств конфигурации приложения в виде пар «Ключ – Значение». Именно с объектами, реализующими этот интерфейс мы и будем работать в дальнейшем чаще всего для того, чтобы получить или добавить настройку в приложении.

Название Тип/тип возвращаемого методом значения Описание
Свойства IConfiguration
Item[String] String Предоставляет доступ к настройке.
Методы IConfiguration
GetChildren() IEnumerable<IConfigurationSection> Возвращает непосредственных потомков узла конфигурации
GetSection (string key) IConfigurationSection Возвращает подраздел конфигурации с указанным ключом
GetReloadToken() IChangeToken Метод можно использовать для получения маркера изменения, уведомляющего о перезагрузке конфигурации

Интерфейс IConfigurationBuilder

Этот интерфейс представляет тип, используемый для построения конфигурации приложения, и содержит свойства и методы, представленные в таблице

Название Тип/тип возвращаемого методом значения Описание
Свойства IConfigurationBuilder
Properties IDictionary<String,Object> Возвращает коллекцию ключей и значений, которую можно использовать для обмена данными между IConfigurationBuilder и зарегистрированными поставщиками конфигурации
Sources IList<IConfigurationSource> Возвращает список источников конфигурации
Методы IConfigurationBuilder
Add (IConfigurationSource source) IConfigurationBuilder Добавляет новый источник конфигурации.
Build () IConfigurationRoot Создает IConfiguration с ключами и значениями на основе набора источников, зарегистрированных в Sources

Для нас ценность этого интерфейса заключается, в первую очередь, в методах его расширения. Ниже, в таблице представлены некоторые из методов расширения IConfigurationBuilder, которые могут использоваться для работы с конфигурацией приложения Blazor Hybrid

Название Описание
AddInMemoryCollection(IConfigurationBuilder, IEnumerable<KeyValuePair<string, string?>>?) Добавляет поставщик конфигурации в памяти
AddJsonFile(IConfigurationBuilder, String) Добавляет поставщик конфигурации JSON по пути path в builder.
AddJsonStream(IConfigurationBuilder,Stream) Добавляет поставщик конфигурации JSON, используя конфигурацию из потока

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

Использование поставщика конфигурации в памяти

В качестве примера, рассмотрим как использовать конфигурацию приложения в памяти. Создадим новое приложение Blazor Hybrid и изменим файл MauiProgram.cs следующим образом:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace MauiApp3
{
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                })
                //добавляем конфигурацию приложения в памяти
                .Configuration.AddInMemoryCollection(new Dictionary<string, string?> 
                {
                    ["Message"] = "Привет, мир"
                });

            builder.Services.AddMauiBlazorWebView();

#if DEBUG
    		builder.Services.AddBlazorWebViewDeveloperTools();
    		builder.Logging.AddDebug();
#endif

            return builder.Build();
        }
    }
}

Здесь, для работы с конфигурацией приложения, подключается пространство имен:

using Microsoft.Extensions.Configuration;

и далее, мы, используя свойство Configuration объекта MauiAppBuilder добавляем в качестве конфигурации приложения коллекцию пар «ключ-значение»:

.Configuration.AddInMemoryCollection(new Dictionary<string, string?> 
{
    ["Message"] = "Привет, мир"
})

здесь метод расширения AddInMemoryCollection() выглядит следующим образом:

public static IConfigurationBuilder AddInMemoryCollection(this IConfigurationBuilder configurationBuilder,
                                                          IEnumerable<KeyValuePair<string, string?>>? initialData)

Мы можем воспользоваться этими настройками в любом месте нашего приложения. Чтобы не подключать каждый раз пространство имен Microsoft.Extensions.Configuration в компонентах Razor, можно перейти в файл _Imports.razor и добавить в него следующую строку:

@using Microsoft.Extensions.Configuration

Теперь перейдем, например, в файл Home.razor и изменим его код следующим образом:

@inject IConfiguration config

@page "/"

<h1>@message</h1>

Welcome to your new app.

@code{
    string message = "Hello, world!";

    protected override void OnInitialized()
    {
        message = config.GetValue<string>("Message");
    }
}

Рассмотрим этот код более подробно. Первое, что мы сделали — это, используя директиву @inject запросили из контейнера зависимостей сервис IConfiguration:

@inject IConfiguration config

Далее мы, используя сервис, получаем значение настройки с именем «Message«, используя метод GetValue<T>():

message = config.GetValue<string>("Message");

и используем полученное значение для вывода приветствия:

<h1>@message</h1>

Теперь можно запустить приложение и убедиться, что настройка для нашего приложения получается из памяти. Например, так будет выглядеть наше приложение в Android:

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

Итого

Конфигурация приложения Blazor Hybrid представлена парами «ключ-значение». В качестве источников конфигурации могут выступать объекты .NET в памяти или файлы, например, в формате JSON.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии