ProtocolServiceFactory.cs 1.35 KB
using Rcs.Application.Services.Protocol;
using Rcs.Domain.Entities;

namespace Rcs.Infrastructure.Services.Protocol;

/// <summary>
/// 协议服务工厂实现
/// 根据协议类型返回对应的协议服务实例
/// @author zzy
/// </summary>
public class ProtocolServiceFactory : IProtocolServiceFactory
{
    private readonly Dictionary<ProtocolType, IProtocolService> _services;

    public ProtocolServiceFactory(IEnumerable<IProtocolService> services)
    {
        _services = services.ToDictionary(s => s.ProtocolType);
    }

    /// <summary>
    /// 根据协议类型获取协议服务
    /// </summary>
    /// <param name="protocolType">协议类型</param>
    /// <returns>协议服务实例</returns>
    /// <exception cref="NotSupportedException">不支持的协议类型</exception>
    public IProtocolService GetService(ProtocolType protocolType)
    {
        if (_services.TryGetValue(protocolType, out var service))
        {
            return service;
        }

        throw new NotSupportedException($"不支持的协议类型: {protocolType}");
    }

    /// <summary>
    /// 根据机器人实体获取协议服务
    /// </summary>
    /// <param name="robot">机器人实体</param>
    /// <returns>协议服务实例</returns>
    public IProtocolService GetService(Robot robot)
    {
        return GetService(robot.ProtocolType);
    }
}