Содержание
Интерфейс 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 можно хранить:
Boolean
Double
Int32
Single
Int64
String
DateTime
Теперь рассмотрим пример использования класса 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.