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