Доработано Demo
All checks were successful
CI / build-test (push) Successful in 30s

This commit is contained in:
2025-12-05 13:33:25 +03:00
parent d817417a69
commit e6e5459280
10 changed files with 103 additions and 15 deletions

View File

@@ -34,7 +34,7 @@ public sealed class BotPagesApp
/// <summary>
/// Установить страницу по умолчанию.
/// </summary>
public BotPagesApp AddDefaultPage<TPage>() where TPage : Page
public BotPagesApp AddDefaultPage<TPage>() where TPage : SingletonPage
{
_navigation.AddDefaultPage<TPage>();
return this;

View File

@@ -22,6 +22,26 @@ public sealed class PageContext
/// <summary>Адаптер мессенджера.</summary>
public required IMessengerAdapter Adapter { get; init; }
//Storage
/// <summary>Получить состояние по ключу.</summary>
public Task<T?> GetStorageAsync<T>(string key, CancellationToken ct)
=> StateStorage.GetAsync<T>(SessionKey, key, ct);
/// <summary>Сохранить состояние по ключу.</summary>
public Task SetStorageAsync<T>(string key, T state, CancellationToken ct)
=> StateStorage.SetAsync<T>(SessionKey, key, state, ct);
/// <summary>Удалить состояние по ключу.</summary>
public Task<bool> RemoveStorageAsync(string key, CancellationToken ct)
=> StateStorage.RemoveAsync(SessionKey, key, ct);
/// <summary>Удалить все состояния по ключу.</summary>
public Task<bool> ClearStorageAsync(CancellationToken ct)
=> StateStorage.ClearAsync(SessionKey, ct);
//Adapter
/// <summary>
/// Отправить текстовое сообщение.
/// </summary>

View File

@@ -23,7 +23,7 @@ public sealed class NavigationService
_routes = routes;
}
internal void AddDefaultPage<TPage>() where TPage : Page
internal void AddDefaultPage<TPage>() where TPage : SingletonPage
{
_defaultPage = typeof(TPage);
}

View File

@@ -3,7 +3,7 @@
/// <summary>
/// Атрибут для свойств страницы, которые должны сохраняться в StateStorage.
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
public sealed class StatefullAttribute : Attribute
{
/// <summary>

View File

@@ -21,7 +21,7 @@ public abstract class StatefullPage : Page
/// <summary>
/// Загружает значения свойств из StateStorage.
/// </summary>
internal async Task LoadState(PageContext ctx, CancellationToken ct)
protected async Task LoadState(PageContext ctx, CancellationToken ct)
{
foreach (var prop in GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
@@ -40,7 +40,7 @@ public abstract class StatefullPage : Page
/// <summary>
/// Сохраняет значения свойств в StateStorage.
/// </summary>
internal async Task SaveState(PageContext ctx, CancellationToken ct)
protected async Task SaveState(PageContext ctx, CancellationToken ct)
{
foreach (var prop in GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{