using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.SignalR; using System.Reflection; namespace Kean.Infrastructure.SignalR { /// /// 抽象 Hub 映射器 /// public abstract class HubMapper { /// /// 映射 Hub 路径 /// /// 路由建造者 internal abstract void Map(IEndpointRouteBuilder endpointBuilder); } /// /// Hub 映射器 /// /// Hub 类型 public sealed class HubMapper : HubMapper where T : Hub { /* * 实现 Kean.Infrastructure.Signalr.HubMapper.Map 方法 */ internal override void Map(IEndpointRouteBuilder endpointBuilder) { var pattern = typeof(T).GetCustomAttribute()?.Pattern; if (string.IsNullOrEmpty(pattern)) { pattern = $"/signalr/{(typeof(T).Name.EndsWith("Hub") ? typeof(T).Name[..^3] : typeof(T).Name)}"; } endpointBuilder.MapHub(pattern); } } }