Я использую SignalR в разных частях своего веб-проекта. В моих контроллерах и HostedService, похоже, все работает нормально. Клиенты создают экземпляры соединений с моим концентратором, и я могу связываться с ними обратно, используя экземпляр IHubContext, введенный в конструктор каждого контроллера / размещенной службы.
У меня есть еще один синглтон, работающий в фоновом режиме (без HosteService или BackgroundTask). Этот класс также вводит IHubContext в конструктор. Тем не менее каждый раз, когда он вызывается, кажется, что у этого синглтона есть другой экземпляр IHubContext, поскольку в этом контексте нет клиентов / групп, подключенных к нему.
Этот класс регистрируется как это в функции запуска:
services.AddSingleton<IServiceEventHandler<TourMonitorEvent>, TourMonitorEventHandler>();
Чтобы настроить SignalR, я делаю следующее в ConfigureServices:
services.AddSignalR().AddNewtonsoftJsonProtocol();
и следующее в configure:
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<MyHubClass>("/hubEndpoint");
endpoints.MapControllers();
});
IHubContext не внедряется как в Controllers / Hostedservices, так и в синглтон следующим образом:
public class MySingleton : IHandler<SomeGenericClass>
{
private readonly IHubContext<MyHubClass> _hubContext;
public MySingleton(IHubContext<MyHubClass> hubContext)
{
_hubContext = hubContext;
}
}
Создается ли экземпляр Controllers / HosteService иначе, чем мой синглтон, и это может повлиять на создание экземпляра IHubContext?