Как внедрить класс SignalR Hub (не hubcontext) в контроллер

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 компьютерный концентратор в файле startup.cs.


person M.skr    schedule 13.06.2018    source источник
comment
Видели ли вы: stackoverflow.com/questions/46904678/   -  person Stephu    schedule 14.06.2018


Ответы (1)


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

services.AddScoped<ComputerHub>();

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

person Chris Pratt    schedule 13.06.2018
comment
Спасибо за ответ. Ты прав. теперь я ввожу хабконтекст в конструкцию ComputerHub. public class ComputerHub : Hub { IHubContext<ComputerHub> _hubContext; public ComputerHub(IHubContext<ComputerHub> hubContext) { _hubcontext = hubcontext; } } . поэтому я могу использовать класс computerhub везде, где я ввожу. Я надеюсь, что я не делаю ничего плохого - person M.skr; 14.06.2018