【问题标题】:Asp.net SignalR features does not work in asp.net coreAsp.net SignalR 功能在 asp.net 核心中不起作用
【发布时间】:2019-04-16 09:39:54
【问题描述】:

我有一个像这样的基本控制器类 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 core 中找不到以下功能:

  • IHub
  • IHubContext
  • 全球主机

如何 Iconvert 我的班级?

【问题讨论】:

    标签: c# asp.net-core signalr signalr-hub


    【解决方案1】:

    HubIHubContext&lt;THub&gt; 仍然存在。你可以使用依赖注入来代替静态的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,因为它们使使用中心上下文更好。

    【讨论】:

      猜你喜欢
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 2019-07-16
      • 2018-08-02
      • 1970-01-01
      相关资源
      最近更新 更多