SignalR Asp 核心集线器注入

SignalR Asp Core hub injection

我可以通过执行以下操作将 signalR hub(ChatHub 派生自 Hub)注入到服务中吗:

在Startup.cs中:

services.AddSingleton<ChatHub>();

要注入另一个服务:

    public AnotherClass(ChatHub chatHub)(....

... chatHub.CallMethod(...

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

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

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