【问题标题】:.NET Core, SignalR Hub's constructor IHubCallerClients is NULL.NET Core,SignalR Hub 的构造函数 IHubCallerClients 为 NULL
【发布时间】:2019-01-02 19:59:33
【问题描述】:

我正在尝试实现 .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,以便我可以将其转发到另一个响应上下文。

提前感谢!

【问题讨论】:

  • 您好,您能否提供有关您要解决的根本问题的更多信息? en.wikipedia.org/wiki/XY_problem 看起来您正在尝试解决“转发请求”,但您正在询问“如何在构造函数中获取 this.Clients?”。

标签: signalr .net-core-2.2


【解决方案1】:

好的。我解决了这个问题

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" 这样我们就可以收集到构造好的对象了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多