Asp.net SignalR功能在asp.net核心中不起作用

问题描述 投票:1回答:1

我有一个基本的conroller类Asp.net框架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我的班级怎么样?

c# asp.net-core signalr signalr-hub
1个回答
1
投票

HubIHubContext<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();
    }
}

我还建议你看看strongly typed hubs,因为他们使用集线器上下文更好一点。

© www.soinside.com 2019 - 2024. All rights reserved.