Комментарии 9
Давно ждал эту более менее рабочую стадию. Переношу старый код, но уже второй день не могу побороть проблему вырезания GlobalHost. Ранее я делал
var context = GlobalHost.ConnectionManager.GetHubContext();
и потом context.Clients.All.InvokeAsync("send", message);
Теперь же на стаке предлагают пользоваться DI, чтобы инициализировать Clients, но дают такие скудные примеры кода, что учитывая, что я вообще не понимаю как этот DI работает ))) у меня ясное дело ничего не выходит.
я вообще не понимаю как этот DI работает
Настоятельно рекомендуется к прочтению Dependency Injection in .NET (на русском )
Про конкретные DI-фреймворки там вообще можно не читать, важно переварить "теоретическую" часть.
ну, например, https://stackoverflow.com/questions/27299289/how-to-get-signalr-hub-context-in-a-asp-net-core
я, кстати, выкрутился без DI. Точнее моя проблема оказалась не в этом. Мне надо было вызывать Clients.All.InvokeAsync() с десятого вложенного класса пятнадцатого потока, потому ни о каком DI там речи идти не могло, чтобы это всё пробрасывать, более того эта шутка и в принципе не работает, когда Clients.All.InvokeAsync() вызывается из другого контекста (ну то есть просто из любого другого метода остального апи, не связанного с сигналом), а не от событий методов хаба signalR
В итоге я просто добавил в хаб private static IHubClients _clients; и записывал в неё Clients при первом подключении любого клиента, а потом уже в любое время вызывал _clients.All.InvokeAsync().
И в чем проблема DI *в десятом вложенном классе пятнадцатого потока*?
Вышла первая версия SignalR для ASP.Net Core 2.0