CurrentScope
using PRTelegramBot.Interfaces;
namespace PRTelegramBot.Core.BotScope
{
/// <summary>
/// Предоставляет доступ к текущему состоянию контекста и бота.
/// Служит только для чтения. Управление стеком выполняет BotDataScope.
/// </summary>
public static class CurrentScope
{
#region Поля и свойства
/// <summary>
/// Хранит стек контекстов бота для текущего асинхронного потока.
/// Используется BotDataScope для управления текущим контекстом,
/// а CurrentScope / BotScopeInfo для безопасного чтения.
/// </summary>
internal static readonly AsyncLocal<Stack<IBotContext>> contextStack = new();
/// <summary>
/// Хранит стек экземпляров бота для текущего асинхронного потока.
/// Используется BotDataScope для управления текущим экземпляром бота,
/// а CurrentScope / BotScopeInfo для безопасного чтения.
/// </summary>
internal static readonly AsyncLocal<Stack<PRBotBase>> botStack = new();
/// <summary>
/// Сервис провайдер.
/// </summary>
internal static readonly AsyncLocal<IServiceProvider?> serviceProvider = new();
/// <summary>
/// Текущий контекст бота (read-only).
/// </summary>
public static IBotContext? Context => contextStack.Value?.Count > 0
? contextStack.Value.Peek()
: null;
/// <summary>
/// Текущий бот (read-only).
/// </summary>
public static PRBotBase? Bot => botStack.Value?.Count > 0
? botStack.Value.Peek()
: null;
/// <summary>
/// Сервисы текущего бота (read-only).
/// </summary>
public static IServiceProvider? Services => serviceProvider.Value;
#endregion
}
}
Last updated