.NET Core,SignalR Hub 的构造函数 IHubCallerClients 为 NULL
.NET Core, SignalR Hub's constructor IHubCallerClients is NULL
我正在尝试实施 .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 上下文。
提前致谢!
好的。我通过
解决了问题
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" 这样我们就可以收集构造对象了
我正在尝试实施 .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 上下文。
提前致谢!
好的。我通过
解决了问题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" 这样我们就可以收集构造对象了