30 lines
993 B
C#
30 lines
993 B
C#
namespace BotPages.Core.Routing;
|
|
|
|
/// <summary>
|
|
/// Реестр маршрутов страниц.
|
|
/// </summary>
|
|
internal sealed class RoutesRegistry
|
|
{
|
|
private readonly Dictionary<string, Type> _routes = new(StringComparer.OrdinalIgnoreCase);
|
|
|
|
/// <summary>
|
|
/// Зарегистрировать маршрут для страницы.
|
|
/// </summary>
|
|
public void Map<TPage>(string template) where TPage : Page
|
|
{
|
|
if (_routes.ContainsKey(template))
|
|
throw new InvalidOperationException($"Route '{template}' is already mapped.");
|
|
_routes[template] = typeof(TPage);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Найти страницу по маршруту.
|
|
/// </summary>
|
|
public Type? Resolve(string template) => _routes.TryGetValue(template, out var t) ? t : null;
|
|
|
|
/// <summary>
|
|
/// Получить снимок всех маршрутов.
|
|
/// </summary>
|
|
public IReadOnlyDictionary<string, Type> Snapshot() => _routes;
|
|
}
|