Доработан стартер адаптеров
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using BotPages.Core.Messaging;
|
||||
using BotPages.Core.Context;
|
||||
using BotPages.Core.Messaging;
|
||||
|
||||
namespace BotPages.Core.Abstractions;
|
||||
|
||||
@@ -40,3 +41,17 @@ public interface IMessengerAdapter
|
||||
/// </summary>
|
||||
Task OnLeaveAsync(PageContext ctx, CancellationToken ct);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Контракт конфигурации адаптера.
|
||||
/// </summary>
|
||||
public interface IMessangerAdapterSetup : IMessengerAdapter
|
||||
{
|
||||
/// <summary>
|
||||
/// Запуск работы адаптера
|
||||
/// </summary>
|
||||
/// <param name="onUpdate"></param>
|
||||
/// <param name="ct"></param>
|
||||
/// <returns></returns>
|
||||
Task StartAdapterAsync(Func<UpdateContext, Task> onUpdate, CancellationToken ct);
|
||||
}
|
||||
@@ -4,16 +4,35 @@ namespace BotPages.Core.Abstractions;
|
||||
|
||||
/// <summary>
|
||||
/// Фабрика адаптеров мессенджеров.
|
||||
/// Используется для разрешения конкретного <see cref="IMessengerAdapter"/> по типу мессенджера.
|
||||
/// Используется для разрешения конкретного <see cref="IMessangerAdapterSetup"/> по типу мессенджера.
|
||||
/// </summary>
|
||||
public interface IMessengerAdapterFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// Список зарегистрированных адаптеров.
|
||||
/// </summary>
|
||||
Dictionary<string, IMessangerAdapterSetup> Adapters { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Зарегистрировать адаптер для указанного типа мессенджера.
|
||||
/// </summary>
|
||||
/// <param name="messengerType">
|
||||
/// Тип мессенджера (например, "Telegram", "Slack", "VK").
|
||||
/// </param>
|
||||
/// <param name="adapter">
|
||||
/// Экземпляр адаптера, реализующий <see cref="IMessengerAdapter"/>.
|
||||
/// </param>
|
||||
/// <returns>
|
||||
/// Текущий экземпляр <see cref="MultiAdapterFactory"/> для цепочки вызовов.
|
||||
/// </returns>
|
||||
IMessengerAdapterFactory Register(string messengerType, IMessangerAdapterSetup adapter);
|
||||
|
||||
/// <summary>
|
||||
/// Получить адаптер для указанного мессенджера.
|
||||
/// </summary>
|
||||
/// <param name="messengerType">
|
||||
/// Тип мессенджера (например, "Telegram", "Slack", "VK").
|
||||
/// Значение должно совпадать с <see cref="UpdateContext.User"/>.<see cref="UserContext.MessengerType"/>.
|
||||
/// Значение должно совпадать с <see cref="UpdateContext.MessengerType"/>.
|
||||
/// </param>
|
||||
/// <returns>
|
||||
/// Экземпляр <see cref="IMessengerAdapter"/>, зарегистрированный для данного типа мессенджера.
|
||||
|
||||
@@ -6,7 +6,12 @@
|
||||
/// </summary>
|
||||
public sealed class MultiAdapterFactory : IMessengerAdapterFactory
|
||||
{
|
||||
private readonly Dictionary<string, IMessengerAdapter> _adapters = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly Dictionary<string, IMessangerAdapterSetup> _adapters = new(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
/// <summary>
|
||||
/// Список зарегистрированных адаптеров.
|
||||
/// </summary>
|
||||
public Dictionary<string, IMessangerAdapterSetup> Adapters => _adapters;
|
||||
|
||||
/// <summary>
|
||||
/// Зарегистрировать адаптер для указанного типа мессенджера.
|
||||
@@ -20,7 +25,7 @@ public sealed class MultiAdapterFactory : IMessengerAdapterFactory
|
||||
/// <returns>
|
||||
/// Текущий экземпляр <see cref="MultiAdapterFactory"/> для цепочки вызовов.
|
||||
/// </returns>
|
||||
public MultiAdapterFactory Register(string messengerType, IMessengerAdapter adapter)
|
||||
public IMessengerAdapterFactory Register(string messengerType, IMessangerAdapterSetup adapter)
|
||||
{
|
||||
_adapters[messengerType] = adapter;
|
||||
return this;
|
||||
|
||||
Reference in New Issue
Block a user