Как получить доступ к свойствам или методам концентратора извне, используя hubcontext через DI? - PullRequest
0 голосов
/ 09 декабря 2018

Я использую хабконтекст, переданный через DI, в моем приложении ASP.Net Core с использованием хаб-хелпера, как описано в этом посте " Как я могу передать контекст-концентратор SignalR в задание Hangfire на ASP .NET Core 2.1?».По сути, я использую помощника, который поддерживает halContext SignalR для отправки сообщений из концентратора с сервера на подключенные клиенты.

Теперь я также пытаюсь сохранить список подключенных клиентов, переопределив onConnected метод моего концентратора SignalR, как описано в этом посте " Как перебирать пользователей в ядре asp.net SignalR? ", чтобы иметь возможность отправлять отдельных (то есть специализированных)сообщений.

Проблема заключается в том, что предлагаемое решение работает изнутри концентратора, в то время как при передаче hubContext через DI у меня есть доступ к концентратору только снаружи.

Так что дляНапример, в моем хаб-хелпере я могу получить доступ к _hubContext.Clients, но не к _hubContext.Context, например, или к любому из открытых методов, таких как onConnected.

Любое предложение?

1 Ответ

0 голосов
/ 14 декабря 2018

Для моей необходимости я определил GetAllActiveConnections как статический в хабе и использовал его из хелперного хаба вместе с внедренным хабконтекстом.

Мой хаб содержит статическое поле:

static HashSet<string> CurrentConnections = new HashSet<string>();

и статический публичный метод, который использует это поле:

public Task GetAllActiveConnections() { ... }

Тогда мой помощник хаба использует статический метод из хаба.

foreach (var activeConnection in MyHub.GetAllActiveConnections())
{
    hubcontext.Clients.Client(activeConnection).SendAsync("hi conn : " + activeConnection);
}
...