.NET Core, конструктор SignalR Hub IHubCallerClients равен NULL - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь реализовать .NET Core 2.2 / SignalR 1.1.0.

При запуске:

public void ConfigureServices(IServiceCollection services)
   services.AddSignalR();

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
   app.UseSignalR(routes =>
   {
     routes.MapHub<ChatHub>("/chatHub");
   });

Работает плавно, когда я применяю пример один к одному.

Но мне нужно архитектурное изменение.

Мой пример:

public class ChatHub : Hub
{
    ResponseHandler ResponseHandler { get; set; }

    public ChatHub()
    {
        IHubCallerClients hubCallerClients = this.Clients;
        ResponseHandler = new ResponseHandler(hubCallerClients);
    }

    public async Task SendMessage(string user, string message)
    {
        IHubCallerClients hubCallerClients = this.Clients;
        await ResponseHandler.R();
    }
}

Если я попытался получить this.Clients в конструкторе itидет с нулевыми данными.Но если я попытаюсь использовать его в методе, он будет заполнен, как и ожидалось.

Мне нужно получить IHubCallerClients в конструкторе, чтобы я мог переслать его в другой контекст ответа.

Спасибо заранее!

1 Ответ

0 голосов
/ 02 января 2019

OK.Я решил проблему с помощью

public class RequestHandler : Hub
{
    ResponseHandler ResponseHandler { get; set; }

    public RequestHandler(IHubContext<RequestHandler> hubContext)
    {
        ResponseHandler = new ResponseHandler(hubContext);
    }

    public async Task SendMessage(string user, string message)
    {
        await ResponseHandler.R();
    }
}

Из-за природы ядра .net контекст приходит в конструктор как зависимость." services.AddSignalR (); " мы обязательно добавим его в Scope.« IHubContext hubContext » Таким образом, мы можем собрать построенный объект.

...