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