从任何地方检索SignalR 3.0中集线器上下文的最佳方法

问题描述 投票:0回答:1

我正在使用SignalR 3.0开发Asp .NET 3.1应用程序,我需要能够随时访问hubcontext。我定期接收数据并进行处理,以在发生计时器事件时将其推送到客户端。这意味着当客户端调用集线器方法或通过控制器或中间件时,我可以依赖访问集线器上下文的功能。由于无法在此版本的signalR中使用GlobalHost,因此最佳方法是什么?

我已经尝试了几种不同的方法,我本来以为对hubcontext保持静态引用,但是我认为这不是一种非常可靠的方法。我本想保持对IServiceProvider的静态引用,但是在我的计时器触发时,服务提供商已被处置。有什么建议吗?

asp.net-core signalr signalr-hub asp.net-core-signalr
1个回答
0
投票

如果使用标准的Asp.Net核心依赖注入(IServiceCollection),则可以在服务的构造函数中注入IHubContext<ChatHub>

public class ChatHub : Hub
{
}

public class NotificationService(IHubContext<ChatHub> notificationsHub)
{
}

// p.s. SignalR registration
private static void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.UseSignalR(routes =>
  {
    routes.MapHub<NotificationsHub>(hubRoute);
  });
}

它对您有用吗?

© www.soinside.com 2019 - 2024. All rights reserved.