首页 > 解决方案 > SignalR Asp Core 集线器注入

问题描述

我可以通过执行以下操作将 signalR 集线器(ChatHub 派生自集线器)注入服务:

在 Startup.cs 中:

services.AddSingleton<ChatHub>();

注入另一个服务:

    public AnotherClass(ChatHub chatHub)(....

... chatHub.CallMethod(...

它的工作,但这是一个好主意?我总是为此目的找到 IHubContext,但我为什么要使用它们呢?

标签: asp.net-coresignalr

解决方案


SignalR 期望为每条消息单独创建集线器。如果您希望集线器处于 DI 中,则需要将其添加为瞬态服务。您通常不应该将集线器从 DI 中解析出来。如果您需要在 Hub 和其他一些组件之间共享代码,我建议使用 IHubContext 或将共享代码放在单独的 DI 服务中。

private IHubContext<ChatHub, IChatHub> ChatHub
{
    get
    {
        return this.serviceProvider.GetRequiredService<IHubContext<ChatHub, IChatHub>>();
    }
}

推荐阅读