如何将 SignalR Hub Class(不是 hubcontext)注入控制器
How to inject SignalR Hub Class (not hubcontext) into Controller
public class ComputerHub : Hub
{
private readonly DbContext _db;
public ComputerHub(DbContext db)
{
_db = db;
}
public Task OpenLock(string connectionId)
{
return Clients.Client(connectionId).SendAsync("OpenLock");
}
...
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
....
app.UseSignalR(routes =>
{
routes.MapHub<ComputerHub>("/computerhub");
});
....
}
我想访问控制器中的 OpenLock 方法。我应该如何将 startup.cs.
中的 computerhub 添加到 ServiceCollection
你似乎不明白这是怎么回事。简单地回答你的问题,直接注入 class,它只需要在服务集合中注册,就像任何其他依赖项一样:
services.AddScoped<ComputerHub>();
但是,这不会如您所愿。 class 本身不做任何事情。它是赋予它权力的枢纽环境。如果您只是简单地注入 class 的实例而没有集线器上下文,那么 Clients
之类的东西(您要使用的方法使用的)将不会被设置并且不会有任何他们实际做任何有用的事情所需的功能。
public class ComputerHub : Hub
{
private readonly DbContext _db;
public ComputerHub(DbContext db)
{
_db = db;
}
public Task OpenLock(string connectionId)
{
return Clients.Client(connectionId).SendAsync("OpenLock");
}
...
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
....
app.UseSignalR(routes =>
{
routes.MapHub<ComputerHub>("/computerhub");
});
....
}
我想访问控制器中的 OpenLock 方法。我应该如何将 startup.cs.
中的 computerhub 添加到 ServiceCollection你似乎不明白这是怎么回事。简单地回答你的问题,直接注入 class,它只需要在服务集合中注册,就像任何其他依赖项一样:
services.AddScoped<ComputerHub>();
但是,这不会如您所愿。 class 本身不做任何事情。它是赋予它权力的枢纽环境。如果您只是简单地注入 class 的实例而没有集线器上下文,那么 Clients
之类的东西(您要使用的方法使用的)将不会被设置并且不会有任何他们实际做任何有用的事情所需的功能。