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>>();
}
}
我可以通过执行以下操作将 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>>();
}
}