Содержание
Интерфейс IConfiguration для конфигурации приложения применяется во всех типах приложений ASP.NET Core и, в частности, в приложениях Blazor. Однако, это не единственный способ хранения настроек приложения для Blazor Hybrid. В Blazor Hybrid возможно также обеспечить хранение настроек приложения в хранилище ключей и значений устройства. Для этого мы можем использовать реализации интерфейсов IPreferences или ISecure, содержащиеся в пространстве имен Microsoft.. В этой части мы рассмотрим использование IPreferences
Интерфейс IPreferences и класс Preferences
Этот интерфейс предоставляет нам удобный API для хранения настроек в виде пар «ключ-значение» в хранилище устройства. Каждая платформа использует свой API для хранения настроек приложения или пользователя:
- в iOS используется
NSUserDefaults - в Android —
SharedPreferences - в Windows —
ApplicationDataContainer
У интерфейса определены следующие методы:
| Метод | Описание |
Clear(String) |
Очищает все ключи и значения. |
Contains |
Проверяет наличие заданного ключа. |
Get<T>(String, T, String) |
Возвращает значение для заданного ключа или значение по умолчанию, указанное, если ключ не существует. |
Remove(String, String) |
Удаляет ключ и связанное с ним значение, если оно существует. |
Set<T>(String, T, String) |
Задает значение для указанного ключа. |
В пространстве имен Microsoft. определен статический класс
public static class Preferences
который предоставляет нам в своем свойстве Default реализацию интерфейса IPreferences по умолчанию. Также, в этом классе определены различные версии методов для работы с ключами и их значениями, основные из которых мы рассмотрим далее. Что касается типов данных, которые могут храниться, то с использованием Preferences можно хранить:
BooleanDoubleInt32SingleInt64StringDateTime
Теперь рассмотрим пример использования класса Preferences.
Использование Preferences для работы с настройками приложения
Создадим новое приложение Blazor Hybrid и изменим файл MauiProgram.cs следующим образом:
using Microsoft.Extensions.Logging;
namespace BlazorPreferences
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
//устанавливаем настройки приложения
Preferences.Default.Set("Message", "Привет, Blazor");
Preferences.Default.Set("Text", "Это пример работы с Preferences");
Preferences.Default.Set("Date", DateTime.Now);
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
});
builder.Services.AddMauiBlazorWebView();
#if DEBUG
builder.Services.AddBlazorWebViewDeveloperTools();
builder.Logging.AddDebug();
#endif
return builder.Build();
}
}
}
Здесь мы, используя статический класс Preferences установили три настройки приложения:
Preferences.Default.Set("Message", "Привет, Blazor");
Preferences.Default.Set("Text", "Это пример работы с Preferences");
Preferences.Default.Set("Date", DateTime.Now);
Для установки свойств мы использовали переопределенные методы Set(). Следует отметить, что метод Set() переписываем значение настройки, если она уже содержится в хранилище. Теперь мы можем воспользоваться этими настройками в любом месте нашего приложения, например, в компоненте Home:
@page "/"
<h1>@message</h1>
@text
@date
@code{
string message;
string text;
DateTime date;
protected override void OnInitialized()
{
message = Preferences.Default.Get("Message", "Hello, world!");
text = Preferences.Default.Get("Text", "Welcome to your new app.");
date = Preferences.Default.Get("Date", DateTime.MinValue);
}
}
Обратите внимание на то, что мы нигде не подключаем новое пространство имен — оно уже подключено по умолчанию в проекте Blazor Hybrid. В компоненте мы переопределили один из методов жизненного цикла компонента и считали значение настроек, используя метод Get():
public static string? Get (string key, string? defaultValue, string? sharedName);
То есть, если настройка содержится в хранилище, то возвращается её значение, иначе — возвращается значение по умолчанию, определенное во втором параметре метода. Запустим приложение и посмотрим на результат:
Также, мы можем проверять наличие настройки в хранилище и, при необходимости, удалять её или же полностью стирать все настройки. Например, перепишем компонент Home следующим образом:
@page "/"
<h1>@message</h1>
@text
<br/>
@date
<br/>
<button @onclick="Clear">Очистить настойки</button>
@code{
string message;
string text;
DateTime date;
private void ReadPreferences()
{
message = Preferences.Default.Get("Message", "Hello, world!");
text = Preferences.Default.Get("Text", "Welcome to your new app.");
date = Preferences.Default.Get("Date", DateTime.MinValue);
}
protected override void OnInitialized()
{
ReadPreferences();
}
public void Clear()
{
Preferences.Default.Clear();
ReadPreferences();
}
}
После запуска приложения вы увидите главную страницу приложения в том виде, в котором она представлена на рисунке выше — все настройки будут прочитаны из хранилища и применены. После того, как будет нажата кнопка «Очистить настройки», все настройки будут удалены и, поэтому, при очередной попытке получить значения настроек в методе ReadPreferences() всем настройкам будет присвоено значение по умолчанию:
Итого
IPreferences — это интерфейс, предоставляющий нам API для хранения настроек приложения в виде пар «ключ-значение» в хранилище устройства. Интерфейс реализуется статическим классом Preferences, который содержится в пространстве имен Microsoft.
