将 IHubContext 注入到 .NET 5 中 SignalR 的后台服务中

问题描述 投票:0回答:1

我有一个中心课程

       public class MyHub : Hub {
    private readonly AppDbContext _dbContext;
       
    public MyHub(AppDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public override Task OnConnectedAsync()
    {
        // Implementation
    }
}

当我尝试注入 Ihubcontext 并运行应用程序时,我得到:无法解析 Microsoft.AspNet.SignalR.IHubContex 类型的服务

public class NotificationService : BackgroundService
{
private readonly IHubContext<MyHub> _hubContext;
private readonly AppDbContext _dbContext;
private int lastProcessedNotificationId = 0;
public NotificationService(IHubContext<MyHub> hubContext, AppDbContext dbContext)
{
_dbContext = dbContext;
_hubContext=hubContext;

        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
              
                await _hubContext.Clients.All.SendMessageToAll("Test");
    
            }
        }
    }

我希望像在我的控制器中一样被注入它的工作原理

asp.net-core dependency-injection background-service asp.net-core-signalr
1个回答
0
投票

您使用了错误的软件包。在您的项目中,您应该使用

Microsoft.AspNetCore.SignalR
包,而不是
Microsoft.AspNet.SignalR

您需要卸载

Microsoft.AspNet.SignalR
软件包,因为signalr是asp.net core中的内置功能。您不需要添加任何包。您可以像下面一样在 .cs 文件命名空间中使用它。

using Microsoft.AspNetCore.SignalR;

对于 J.Memisevic 的评论,我们想检查一下您如何注册后台服务。

类似

builder.Services.AddHostedService<HubClientService>();
© www.soinside.com 2019 - 2024. All rights reserved.