ProtocolServiceFactory.cs
1.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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);
}
}