Функции Asp.net SignalR не работают в ядре asp.net - PullRequest
1 голос
/ 16 апреля 2019

У меня есть базовый класс контроллеров Asp.net Framework 4.6, как это:

public abstract class SignalRBaseController<THub> : ControllerBase where THub : IHub
{
    private static readonly Func<IHubContext> ValueFactory = () => GlobalHost.ConnectionManager.GetHubContext<THub>();

    private readonly Lazy<IHubContext> hub = new Lazy<IHubContext>(ValueFactory);

    protected IHubContext Hub => hub.Value;
}

И я преобразовал проект в ядро ​​asp.net. Итак, в ядре asp.net не найдены следующие функции:

  • IHUB
  • IHubContext
  • GlobalHost

Как Iconvert мой класс?

1 Ответ

1 голос
/ 16 апреля 2019

Hub и IHubContext<THub> все еще там.Вместо статического GlobalHost вы бы использовали внедрение зависимостей.

Я не буду давать вам прямой перевод вашего абстрактного контроллера, поскольку я считаю, что это на самом деле не так уж и полезно: при условии, что у вас есть контроллерэто просто берет один контекст концентратора (вместо других зависимостей), кажется, предполагает довольно много.И ленивый шаблон здесь на самом деле не нужен.

Таким образом, вместо этого показан пример реализации контроллера, который использует контекст концентратора как часть своих зависимостей:

public class ExampleController : ControllerBase
{
    private readonly IHubContext<MyHub> _myHubContext;

    public ExampleController(IHubContext<MyHub> myHubContext)
    {
        _myHubContext = myHubContext;
    }

    [HttpPost]
    public async Task<IActionResult> PostMessage(string message)
    {
        await _myHubContext.Clients.All.SendAsync("DoSomething", message);
        return Ok();
    }
}

Я бы также предложил вамвзглянуть на строго типизированные хабы , поскольку они делают использование хаб-контекста немного приятнее.

...