我有一个中心课程
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");
}
}
}
我希望像在我的控制器中一样被注入它的工作原理
您使用了错误的软件包。在您的项目中,您应该使用
Microsoft.AspNetCore.SignalR
包,而不是 Microsoft.AspNet.SignalR
。
您需要卸载
Microsoft.AspNet.SignalR
软件包,因为signalr是asp.net core中的内置功能。您不需要添加任何包。您可以像下面一样在 .cs 文件命名空间中使用它。
using Microsoft.AspNetCore.SignalR;
对于 J.Memisevic 的评论,我们想检查一下您如何注册后台服务。
类似
builder.Services.AddHostedService<HubClientService>();