ASP.NET CORE 2.1 WEB API
У меня есть одноэлементный класс, который является tcpip-клиентом (TcpIpSerrvice), запущенный в Startup.cs, когда API выполняет и должна работать все время.Я не могу понять, как получить доступ к IHubContext из этого синглтона, чтобы иметь возможность отправлять tcp-данные в веб-интерфейс через SignalR.
Я пытался вызвать это через статическое свойство Action в классе сиглета, но когда этозапускается в Hub, Hub уже удален, и я получаю (System.ObjectDisposedException: «Не удается получить доступ к удаленному объекту.»)
в одноэлементном классе
public static Action<string> DataArrived { get; set; }
и когда в хабе
TcpIpService.DataArrived = new Action<string>(MessageFromPlcReceived);
я знаю, что это может быть введено в контроллеры или службы, но мне нужно это для доступа к нему из других мест.
Я знаю, что GlobalHost
недоступно в новом SignalR, и IHubContext легко внедряется, но это не сработает (по крайней мере, пока) с классом синглтона, который создается отдельно в Startup.cs
Есть идеи, как это сделать?
Я нашел ужасный способ сделать это после получения репозитория SignalR GitHub.Я могу сделать это в моем Startup.cs, метод Configure:
TcpIpService.HubContext = app.ApplicationServices.GetRequiredService<IHubContext<VcHub>>();
, который просто создает то, что раньше делал старый GlobalHost.Как бы ужасно это ни было, я не могу найти лучшего решения ... пока.Есть ли лучший способ сделать это?