using System.Threading.Tasks; using System.Text.Json; using Microsoft.JSInterop; namespace MP.Data.Services { public interface ISessionStorageService { #region Public Methods Task ClearAsync(); Task ContainKeyAsync(string key); Task GetItemAsync(string key); Task GetItemAsync(string key, T fallback); Task RemoveItemAsync(string key); Task SetItemAsync(string key, T value); #endregion Public Methods } public class SessionStorageService : ISessionStorageService { #region Public Constructors public SessionStorageService(IJSRuntime js) { _js = js; } #endregion Public Constructors #region Public Methods public async Task ClearAsync() { await _js.InvokeVoidAsync("sessionStorage.clear"); } public async Task ContainKeyAsync(string key) { var value = await _js.InvokeAsync("sessionStorage.getItem", key); return value != null; } /// /// Lettura con valori default(null) in caso di missing: /// int: 0 /// string: null /// bool: false /// DateTime: 01/01/0001 /// myClass: null /// /// /// /// public async Task GetItemAsync(string key) { var json = await _js.InvokeAsync("sessionStorage.getItem", key); if (json is null) return default; return JsonSerializer.Deserialize(json); } /// /// Lettura valore con gestione fallback esplicito /// /// /// /// /// public async Task GetItemAsync(string key, T fallback) { var json = await _js.InvokeAsync("sessionStorage.getItem", key); if (json is null) return fallback; return JsonSerializer.Deserialize(json) ?? fallback; } public async Task RemoveItemAsync(string key) { await _js.InvokeVoidAsync("sessionStorage.removeItem", key); } public async Task SetItemAsync(string key, T value) { var json = JsonSerializer.Serialize(value); await _js.InvokeVoidAsync("sessionStorage.setItem", key, json); } #endregion Public Methods #region Private Fields private readonly IJSRuntime _js; #endregion Private Fields } }