【发布时间】:2020-12-13 22:10:59
【问题描述】:
我有很多 Hub 并注册它们:
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]' 已注册。
问题出在哪里?
【问题讨论】:
-
您注册了端点。但是您是否注册了服务?
services.AddSignalR();? -
@Fildor No. 服务通过注册端点自动注册,不是吗?
-
我上次检查的时候,你至少需要做
services.AddSignalR();。 -
@Fildor 哦,当然。我注册了 SignalR。我添加到帖子消息中。
-
如果你进行 CTOR 注射,它是否有效?
标签: c# asp.net-core dependency-injection asp.net-core-webapi signalr-hub