Files
BotPages/BotPages.Core/Abstractions/MultiAdapterFactory.cs
FrigaT a94327f0c8
All checks were successful
CI / build-test (push) Successful in 33s
Release / pack-and-publish (release) Successful in 38s
Доработан стартер адаптеров
2025-12-05 18:06:12 +03:00

51 lines
2.3 KiB
C#

namespace BotPages.Core.Abstractions;
/// <summary>
/// Реализация <see cref="IMessengerAdapterFactory"/>, позволяющая регистрировать и разрешать несколько адаптеров мессенджеров.
/// </summary>
public sealed class MultiAdapterFactory : IMessengerAdapterFactory
{
private readonly Dictionary<string, IMessangerAdapterSetup> _adapters = new(StringComparer.OrdinalIgnoreCase);
/// <summary>
/// Список зарегистрированных адаптеров.
/// </summary>
public Dictionary<string, IMessangerAdapterSetup> Adapters => _adapters;
/// <summary>
/// Зарегистрировать адаптер для указанного типа мессенджера.
/// </summary>
/// <param name="messengerType">
/// Тип мессенджера (например, "Telegram", "Slack", "VK").
/// </param>
/// <param name="adapter">
/// Экземпляр адаптера, реализующий <see cref="IMessengerAdapter"/>.
/// </param>
/// <returns>
/// Текущий экземпляр <see cref="MultiAdapterFactory"/> для цепочки вызовов.
/// </returns>
public IMessengerAdapterFactory Register(string messengerType, IMessangerAdapterSetup adapter)
{
_adapters[messengerType] = adapter;
return this;
}
/// <summary>
/// Получить адаптер для указанного мессенджера.
/// </summary>
/// <param name="messengerType">
/// Тип мессенджера (например, "Telegram", "Slack", "VK").
/// </param>
/// <returns>
/// Экземпляр <see cref="IMessengerAdapter"/>, зарегистрированный для данного типа мессенджера.
/// </returns>
/// <exception cref="InvalidOperationException">
/// Выбрасывается, если адаптер для указанного типа не зарегистрирован.
/// </exception>
public IMessengerAdapter Resolve(string messengerType)
=> _adapters.TryGetValue(messengerType, out var adapter)
? adapter
: throw new InvalidOperationException($"No adapter registered for {messengerType}");
}