我正在使用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方法创建的另一个Context类:
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类的引用注入到我自己的IoC容器中,这样我就可以解决它并在其上调用BroadCast方法,它应该处理向客户端发送消息。
我正在使用Service Bus来侦听来自系统其他部分的消息,一旦我收到来自Queue的消息,我想使用来自QueueHandler的HubContext通知已连接的客户端。
答案 0 :(得分:0)
var hubContext = app.ApplicationServices.GetService<IHubContext<Notification>>
这解决了我的问题。
答案 1 :(得分:0)
我的课堂设计如下。
public class NotificationHub : Microsoft.AspNetCore.SignalR.Hub
{
public static IHubContext<NotificationHub> Current { get; set; }
}
在您的启动课程中
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
NotificationHub.Current = app.ApplicationServices.GetService<IHubContext<NotificationFromServerHub>>();
}
因此,您可以在任何地方这样使用。
public class MyBizClass
{
public void DoSomething()
{
NotificationHub.Current.MyMethod(...);
}
}