.NET Core,SignalR Hub的构造函数IHubCallerClients为NULL

时间:2019-01-02 08:17:03

标签: signalr .net-core-2.2

我正在尝试实现.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 ,它将带有空数据。但是,如果我尝试将其用于方法中,它将按预期完成。

我应该在构造器中获取IHubCallerClients,以便可以将其转发到另一个Response上下文。

谢谢前进!

1 个答案:

答案 0 :(得分:0)

好。我通过

解决了问题
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 ”这样,我们可以收集结构化的对象。