1

我正在使用 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);
        }
    }

以下是我创建的另一个 Context 类,用于在客户端调用 Hub 的方法:

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 方法,它应该处理向客户端发送消息。

我正在使用服务总线来侦听来自系统另一部分的消息,一旦我收到来自队列的消息,我想使用来自 QueueHandler 的 HubContext 通知连接的客户端。

装配信息

4

2 回答 2

0
var hubContext = app.ApplicationServices.GetService<IHubContext<Notification>>

这解决了我的问题。

于 2018-06-01T14:15:57.477 回答
0

我设计我的课程如下。

public class NotificationHub : Microsoft.AspNetCore.SignalR.Hub
{
    public static IHubContext<NotificationHub> Current { get; set; }
}

在你的 Startup 课程中

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    NotificationHub.Current = app.ApplicationServices.GetService<IHubContext<NotificationFromServerHub>>();

}

因此,您可以在任何地方像这样使用。

public class MyBizClass
{
    public void DoSomething()
    {
        NotificationHub.Current.MyMethod(...);
    }
}
于 2020-04-14T18:10:17.713 回答