Оптимальный способ получения контекста концентратора в SignalR 3.0 из любого места - PullRequest
0 голосов
/ 16 марта 2020

Я работаю над приложением Asp. NET 3.1, использующим SignalR 3.0, и мне нужна возможность доступа к hubcontext в любое время. Я регулярно и получаю данные и обрабатываю их до pu sh для клиентов, когда срабатывает таймер. Это означает, что я могу положиться на возможность доступа к hubcontext, когда клиент вызывает метод-концентратор или через контроллеры или промежуточное программное обеспечение. Поскольку я не могу использовать GlobalHost в этой версии signalR, каков оптимальный способ сделать это?

Я пробовал несколько разных вещей, я изначально думал сохранить статическую ссылку на хабконтекст, но я не думаю, что это очень надежный метод. Я подумал сохранить ссылку на c на IServiceProvider, но к тому времени, когда мои таймеры сработали, провайдер услуг уже был настроен. Есть предложения?

1 Ответ

0 голосов
/ 16 марта 2020

Если вы используете стандартный Asp. Net Внедрение зависимостей ядра (IServiceCollection), вы можете добавить IHubContext<ChatHub> в конструктор вашего сервиса:

    public class NotificationsHub : Hub
    {
    }

    public class NotificationService(IHubContext<NotificationsHub> notificationsHub) : INotificationService
    {
    }

    // ***** At Startup ********

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

    // dependencies registration
    public static IServiceCollection RegisterServices(IServiceCollection services)
    {
      services.AddSingleton<INotificationsService, NotificationService>();
    }

Это работает для вас?

...