如何将SignalR Hub类(不是hubcontext)注入Controller

时间:2018-06-13 10:47:40

标签: signalr asp.net-core-2.1

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中向ServiceCollection添加computerhub。

1 个答案:

答案 0 :(得分:1)

您似乎不明白这是如何运作的。要简单回答您的问题,直接注入类,只需要在服务集合中注册,就像任何其他依赖项一样:

Article

然而,这不会做你想要的。班级本身没有做任何事情。它是以其权力赋予它的枢纽环境。如果您只是注入类的实例而没有集线器上下文,那么services.AddScoped<ComputerHub>(); (您想要使用的方法使用的)将不会被设置,并且将不具备它们所需的任何功能实际做任何有用的事情。