使用 Aspnetcore.signalr 库从 Hub 外部获取 HubContext(不是从 Controller)
Get HubContext from outside of Hub using Aspnetcore.signalr libray (not from Controller)
我正在使用 AspNetCore.SignalR 开发 SignalR 服务。
以下是我的中心:
public class NotificationHub : Microsoft.AspNetCore.SignalR.Hub
{
public override async Task OnConnectedAsync()
{
await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception exception)
{
await base.OnDisconnectedAsync(exception);
}
}
以下是我创建的用于在客户端调用 Hub 方法的另一个上下文 class:
public class NotificationHubContext
{
private readonly IHubContext<NotificationHub> _context;
public NotificationHubContext(IHubContext<NotificationHub> context)
{
_context = context;
}
public async Task Broadcast(string groupId, string eventName, object data)
{
await _context.Clients.Group(groupId).SendAsync(eventName, data);
}
}
我想将 NotificationContext class 的引用注入到我自己的 IoC 容器中,这样我就可以解析它并在其上调用 BroadCast 方法,它应该处理向客户端发送消息。
我正在使用服务总线来侦听来自系统另一部分的消息,一旦我收到来自队列的消息,我想使用来自 QueueHandler 的 HubContext 通知已连接的客户端。
Assembly Info
var hubContext = app.ApplicationServices.GetService<IHubContext<Notification>>
这解决了我的问题。
我的 class 设计如下。
public class NotificationHub : Microsoft.AspNetCore.SignalR.Hub
{
public static IHubContext<NotificationHub> Current { get; set; }
}
在你的启动中class
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
NotificationHub.Current = app.ApplicationServices.GetService<IHubContext<NotificationFromServerHub>>();
}
因此,您可以在任何地方像这样使用。
public class MyBizClass
{
public void DoSomething()
{
NotificationHub.Current.MyMethod(...);
}
}
我正在使用 AspNetCore.SignalR 开发 SignalR 服务。
以下是我的中心:
public class NotificationHub : Microsoft.AspNetCore.SignalR.Hub
{
public override async Task OnConnectedAsync()
{
await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception exception)
{
await base.OnDisconnectedAsync(exception);
}
}
以下是我创建的用于在客户端调用 Hub 方法的另一个上下文 class:
public class NotificationHubContext
{
private readonly IHubContext<NotificationHub> _context;
public NotificationHubContext(IHubContext<NotificationHub> context)
{
_context = context;
}
public async Task Broadcast(string groupId, string eventName, object data)
{
await _context.Clients.Group(groupId).SendAsync(eventName, data);
}
}
我想将 NotificationContext class 的引用注入到我自己的 IoC 容器中,这样我就可以解析它并在其上调用 BroadCast 方法,它应该处理向客户端发送消息。
我正在使用服务总线来侦听来自系统另一部分的消息,一旦我收到来自队列的消息,我想使用来自 QueueHandler 的 HubContext 通知已连接的客户端。
Assembly Info
var hubContext = app.ApplicationServices.GetService<IHubContext<Notification>>
这解决了我的问题。
我的 class 设计如下。
public class NotificationHub : Microsoft.AspNetCore.SignalR.Hub
{
public static IHubContext<NotificationHub> Current { get; set; }
}
在你的启动中class
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
NotificationHub.Current = app.ApplicationServices.GetService<IHubContext<NotificationFromServerHub>>();
}
因此,您可以在任何地方像这样使用。
public class MyBizClass
{
public void DoSomething()
{
NotificationHub.Current.MyMethod(...);
}
}