簡體   English   中英

如何從 .NET Core 3.1 中的 DI 獲取 SignalR IHubContext?

[英]How to get SignalR IHubContext from DI in .NET Core 3.1?

我有很多集線器並注冊它們:

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?}");
});

我注冊 SignalR:

services.AddSignalR(options =>
{
    options.EnableDetailedErrors = true;
    options.MaximumReceiveMessageSize = signalrMaxMessageLimit * 8192;
}).AddMessagePackProtocol(conf =>
{
    conf.FormatterResolvers.Clear();
    conf.FormatterResolvers.Add(CircularResolver.Instance);
});

它們用作 SignalR 集線器。 但是當我嘗試在 Microsoft.AspNetCore.Mvc.ControllerBase 中解決它們時:

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

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

我得到一個例外:

System.InvalidOperationException:未注冊類型為“Microsoft.AspNet.SignalR.IHubContext`1[Engy.Plantain.Procurement.Backend.Hubs.FinanceHub]”的服務。

問題出在哪兒?

作為 eveyone,我敢肯定,我想,這是我的錯誤。 在 API 控制器中,我試圖解決Microsoft.AspNet.SignalR.IHubContext而不是Microsoft.AspNetCore.SignalR.IHubContext 現在一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM