Asp.net SignalR 功能在 asp.net 核心中不起作用
Asp.net SignalR features does not work in asp.net core
我有一个基础控制器 class 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
- 全球主机
如何转换我的 class?
Hub
and 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();
}
}
我还建议您查看 strongly typed hubs,因为它们可以更好地使用 hub 上下文。
我有一个基础控制器 class 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
- 全球主机
如何转换我的 class?
Hub
and 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();
}
}
我还建议您查看 strongly typed hubs,因为它们可以更好地使用 hub 上下文。