Содержание
Использование JSON-файлов для конфигурации приложения — это один из наиболее распространенных способов хранения настроек приложения Blazor.
Файл конфигурации appsettings.json
Если вы до изучения Blazor Hybrid работали с другими типами проектов Blazor или, в принципе, с проектами ASP.NET Core, то наверняка заметили, что в Blazor Hybrid отсутствует по умолчанию такой файл как appsettings.json, в котором обычно хранятся настройки приложения. Однако, никто не запрещает нам создать этот файл самостоятельно и использовать в приложении.
Итак, первое, что нам необходимо сделать — это создать новый проект и разместить в папке wwwroot файл appsettings.json
со следующим содержимым:
{
"Message": "Привет, Blazor"
}
Если бы мы использовали наше приложение только в Windows, то на этом моменте мы бы закончили работу с json-файлом и перешли бы к работе с приложением. Но так как мы планируем использовать конфигурацию приложения и в Windows и в Android, то нам необходимо сделать этот файл встроенным ресурсом приложения. Для этого выберем файл в обозревателе решений и укажем для него действие при сборке:
Теперь наш файл будет встраиваться в сборку и нам необходимо будет только правильно его загрузить в приложении.
Работа с конфигурацией приложения в виде JSON
Для загрузки конфигурации из JSON у интерфейса IConfigurationBuilder имеется следующий метод расширения:
public static IConfigurationBuilder AddJsonStream(this IConfigurationBuilder builder, Stream stream)
Воспользуемся этим методом в нашем приложении. Изменим код MauiProgram.cs следующим образом:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using System.Reflection;
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");
});
using var appsettingsStream = Assembly
.GetExecutingAssembly()
.GetManifestResourceStream("MauiApp3.wwwroot.appsettings.json");
if (appsettingsStream != null)
{
var config = new ConfigurationBuilder()
.AddJsonStream(appsettingsStream)
.Build();
builder.Configuration.AddConfiguration(config);
}
builder.Services.AddMauiBlazorWebView();
#if DEBUG
builder.Services.AddBlazorWebViewDeveloperTools();
builder.Logging.AddDebug();
#endif
return builder.Build();
}
}
}
Первое, что мы делаем — это получаем наш ресурс (файл appsettings.json) в виде объекта Stream:
using var appsettingsStream = Assembly
.GetExecutingAssembly()
.GetManifestResourceStream("MauiApp3.wwwroot.appsettings.json");
Здесь стоит обратить внимание на имя загружаемого ресурса: MauiApp3.wwwroot.appsettings.json. MauiApp3 — это имя проекта, wwwroot — имя папки в которой расположен файл appsettings.json
Получив ы свое распоряжение Stream, мы создаем новую конфигурацию:
var config = new ConfigurationBuilder()
.AddJsonStream(appsettingsStream)
.Build();
здесь config — это объект, реализующий интерфейс IConfigurationRoot. Полученный объект передается в качестве параметра для метода расширения AddConfiguration():
builder.Configuration.AddConfiguration(config);
Этот код можно сделать немного короче, просто воспользовавшись методом расширения AddJsonStream() непосредственно через свойство Configuration:
if (appsettingsStream != null)
{
builder.Configuration.AddJsonStream(appsettingsStream);
}
Теперь воспользуемся конфигурацией так же, как мы это делали в предыдущей части:
Microsoft.Extensions.Configuration@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");
}
}
Теперь можно запустить приложение, например, в Android и убедиться, что конфигурация с использованием JSON-файлов работает:
Использование секций
Преимуществом использования JSON-файлов для конфигурации приложения является в первую очередь то, что мы можем удобно размещать настройки приложения в секциях (объектах JSON). Например, изменим наш файл следующим образом:
{
"Greetings": {
"MessageRu": "Привет, Blazor",
"MessageEn": "Hello, Blazor"
},
"Counter": {
"Value": 10
}
}
Здесь мы определили две секции: Greetings — для настроек строки приветствия в компоненте Home и Counter — для настройки компонента Counter. Воспользуемся этими настройками в нашем приложении. Изменим компонент Home:
@inject IConfiguration config
@page "/"
<h1>@messageRu</h1>
<h2>@messageEn</h2>
Welcome to your new app.
@code{
string? messageEn = "Hello, world!";
string? messageRu = "Привет, мир!";
protected override void OnInitialized()
{
var section = config.GetSection("Greetings");
messageRu = section.GetValue<string>("MessageRu");
messageEn = section.GetValue<string>("MessageEn");
}
}
и Counter:
@page "/counter"
@inject IConfiguration config
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
protected override void OnInitialized()
{
var section = config.GetSection("Counter");
currentCount = section.GetValue<int>("Value");
}
}
Теперь запустим приложение и посмотрим на результаты:
Итого
В Blazor Hybrid мы можем использовать конфигурацию приложения в виде JSON-файлов. При этом, JSON-файл должен определяться в приложении как встроенный ресурс. Конфигурация в виде JSON может содержать секции с настройками, что делает конфигурацию приложения более удобно в чтении и использование.


