在SignalR集线器中注入单例作用域依赖

时间:2019-03-06 14:52:21

标签: c# asp.net-core signalr asp.net-core-signalr

我正在使用Microsoft.AspNetCore.SignalR (1.1.0)

我在startup.cs有一些服务:

services.AddSingleton<IHostedService, MySingletonService>();
services.AddScoped<MyScopedService >();

现在我想在集线器中使用此服务,所以我将其注入:

private readonly MyScopedService _cs;
private readonly MySingletonService _ss;
public MyHub(MyScopedService cs, MySingletonService ss)
{
    _cs = cs;
    _ss= ss;
}

这仅适用于作用域服务,该服务一旦成为单例,便不会调用集线器,也无法在浏览器中进行连接。为什么这不可能呢?我只想要单例服务的现有实例,调用一个方法,然后再放开。

1 个答案:

答案 0 :(得分:0)

这与SignalR无关。由于我将服务创建为IHostedService,所以我还需要将其作为IHostedService注入,这是不可能的,因为我有多个IHostedServices并且只想要这个特定的服务。解决方案是将普通单例注入,然后启动它。

services.AddSingleton<MySingletonService>();

//Start the background services
services.AddHostedService<BackgroundServiceStarter<MySingletonService>>();

我在这里找到了解决方案: https://stackoverflow.com/a/51314147/1560347