C# 如何从.NETCore3.1中的DI获取信号器IHubContext?

C# 如何从.NETCore3.1中的DI获取信号器IHubContext?,c#,asp.net-core,dependency-injection,asp.net-core-webapi,signalr-hub,C#,Asp.net Core,Dependency Injection,Asp.net Core Webapi,Signalr Hub,我有许多集线器并注册它们: app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapHub<FinanceHub>("/hub/finance"); endpoints.MapHub<PartnersHub>("/hub/partners"); ... endpoints.MapHub<War

我有许多集线器并注册它们:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
    endpoints.MapHub<FinanceHub>("/hub/finance");
    endpoints.MapHub<PartnersHub>("/hub/partners");
    ...
    endpoints.MapHub<WarehousesHub>("/hub/warehouses");
    endpoints.MapControllerRoute("default", "{controller}/{action}/{id?}");
});
他们作为信号中心工作。但当我试图在Microsoft.AspNetCore.Mvc.ControllerBase中解决这些问题时:

private IHubContext<FinanceHub> financeHub => provider.GetRequiredService<IHubContext<FinanceHub>>();

public PaymentRegisterController(
    ILogger<ServiceController> logger,
    IServiceProvider _provider) : base(logger)
{
    provider = _provider;
}
private IHubContext financeHub=>provider.GetRequiredService();
公共付款注册控制器(
ILogger记录器,
IServiceProvider_提供程序):基本(记录器)
{
提供者=_提供者;
}
我得到一个例外:

System.InvalidOperationException:类型没有服务 'Microsoft.AspNet.signal.IHubContext'1[Engy.Plantain.Procurement.Backend.Hubs.FinanceHub]' 已注册


问题出在哪里?

我敢肯定,每个人都认为这是我的错误。在API控制器中,我试图解析Microsoft.AspNet.signar.IHubContext而不是Microsoft.AspNetCore.signar.IHubContext。
现在一切都很完美。

我敢肯定,每个人都认为这是我的错误。在API控制器中,我试图解析Microsoft.AspNet.signar.IHubContext而不是Microsoft.AspNetCore.signar.IHubContext。
现在一切正常。

您已注册了enpoints。但是你注册服务了吗<代码>服务。AddSignalR()?@Fildor No.服务通过注册端点自动注册,不是吗?上次我检查时,您至少需要执行
Services.AddSignalR()@Fildor哦,当然。我注册信号员。我在帖子中添加了。如果你这样做了,它能工作吗?你注册了enpoints。但是你注册服务了吗<代码>服务。AddSignalR()?@Fildor No.服务通过注册端点自动注册,不是吗?上次我检查时,您至少需要执行
Services.AddSignalR()@Fildor哦,当然。我注册信号员。我在帖子中添加了。如果你这样做了,它会起作用吗?
private IHubContext<FinanceHub> financeHub => provider.GetRequiredService<IHubContext<FinanceHub>>();

public PaymentRegisterController(
    ILogger<ServiceController> logger,
    IServiceProvider _provider) : base(logger)
{
    provider = _provider;
}