51 lines
2.3 KiB
C#
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}");
|
|
}
|