【问题标题】:Injecting singleton scoped dependency in SignalR hub在 SignalR 集线器中注入单例范围的依赖项
【发布时间】:2019-03-06 23:29:33
【问题描述】:

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

这仅适用于范围服务,只要服务是单例的,集线器就永远不会被调用并且无法在浏览器中连接。为什么这是不可能的?我只想要单例服务的现有实例,调用一个方法,然后再放手。

【问题讨论】:

  • 这里发生了其他事情。在像集线器这样生命周期更有限的东西中使用单例服务没有问题。您需要在此处提供更多信息。也许发布导致问题的服务代码和/或您的实际集线器代码而不是示例代码。查看控制台输出,看看是否有任何异常。

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


【解决方案1】:

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

services.AddSingleton<MySingletonService>();

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多