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, IMessengerAdapterSetup 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}"); }