asp.net-core - .NET 6 IHubContext 依赖注入(inject)

标签 asp.net-core dependency-injection .net-6.0 asp.net-core-signalr

我正在开发一个简单的 .NET 6 应用程序,以在我们的前端应用程序中启用数据更新通知。我以前在 .NET 5 中构建过类似的东西,但我遇到了一个让我难过的 DI 问题。在 5 中,所有自动映射的集线器都有一个在容器中为它们设置的 IHubContext。在 6 中似乎不再是这种情况。

System.InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNet.SignalR.IHubContext`1[SignalRNotifications.Hubs.NotificationHub]' while attempting to activate 'SignalRNotifications.Controllers.NotificationController'.

6 中新的非启动 DI 对我来说看起来很奇怪,但我只是没有看到任何可用的说明如何修复它。关于如何让 IHubContext 注入(inject)我的 Controller 有什么建议吗?

谢谢!

更新:这里是一些相关的代码:

using Microsoft.AspNetCore.Builder;
using SignalRNotifications.Hubs;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
builder.Services.AddSignalR().AddAzureSignalR();


var app = builder.Build();

// Configure the HTTP request pipeline.
app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<NotificationHub>("/NotificationHub");
});

app.Run();

依赖注入(inject)以最可预测的方式在 Controller 中完成:

namespace SignalRNotifications.Controllers
{
    [AllowAnonymous]
    [Route("api/[controller]")]
    [ApiController]
    public class NotificationController : ControllerBase
    {
        private readonly IHubContext<NotificationHub> _notificationContext;

        public NotificationController(IHubContext<NotificationHub> notificationContext)
        {
            _notificationContext = notificationContext;
        }

最佳答案

System.InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNet.SignalR.IHubContext`1[SignalRNotifications.Hubs.NotificationHub]' while attempting to activate 'SignalRNotifications.Controllers.NotificationController'.

此问题可能与您安装了错误版本的 SignalR 并添加了错误的命名空间引用有关。您正在使用 Microsoft.AspNet.SignalR.IHubContext,而不是 Microsoft.AspNetCore.SignalR.IHubContext

根据你的代码引用Asp.net Core SignalR document ,我创建了一个示例和 inject an instance of IHubContext in a controller ,一切正常。但我注意到,在使用 IHubContext 时,我们需要添加 using Microsoft.AspNetCore.SignalR; 命名空间,如下所示:

enter image description here

因此,请检查您的代码并尝试使用:

 using Microsoft.AspNetCore.SignalR;

关于asp.net-core - .NET 6 IHubContext 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71517673/

相关文章:

azure - Swagger UI 页面的隔离 Azure Function 绕过身份验证中间件

c# - 在 asp.net 核心端点上读取 Csv

docker - docker 容器中的hangfire 无法正常工作黑屏访问仪表板 url

c# - 后台任务的全局异常处理

c# - 连接字符串代理?

c# - 如何检测 EF 生成的多对多自引用关系中的引用循环?

reactjs - asp.net core 2.1 Webpack 4 React 无法正常启动

java - Guice @Inject 无法使用多个构造函数注入(inject)

java - 使用 p : namespace 注入(inject)映射类型属性

.NET 6 TimeZoneInfo.TryConvertWindowsIdToIanaId() 确实返回 false