Содержание
Под конфигурацией приложения обычно понимаются какие-либо настройки, применяемые, при запуске приложения. Это могут быть такие настройки, как строки подключения к базам данных, настройки оформления приложения, включение дополнительных опций и т. д. В Blazor Hybrid конфигурация приложения может осуществляться несколькими способами.
Общие сведения о конфигурации в Blazor Hybrid
Для конфигурации приложения Blazor Hybrid мы можем использовать следующие источники конфигурации:
- JSON-файлы,
- объекты .NET в памяти;
- пользовательские поставщики конфигурации;
В терминах 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.