Как внедрить класс-концентратор SignalR (не hubcontext) в контроллер - PullRequest
0 голосов
/ 13 июня 2018
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 в контроллере.Как мне добавить в ServiceCollection computerhub в файле startup.cs.

1 Ответ

0 голосов
/ 13 июня 2018

Вы, кажется, не понимаете, как это работает.Чтобы просто ответить на ваш вопрос, чтобы внедрить класс напрямую, его просто нужно зарегистрировать в коллекции сервисов, как и любую другую зависимость:

services.AddScoped<ComputerHub>();

Однако это не будет делать то, что вы хотите.Сам класс ничего не делает.Это контекст центра, который наделяет его своими способностями.Если вы просто внедрите экземпляр класса без контекста хаба, то такие вещи, как Clients (который использует метод, который вы хотите использовать) не будут установлены и не будут обладать какой-либо функциональностью, которая им фактически необходима для выполненияничего полезного.

...