我有一个基本的控制器类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 core。因此,在asp.net核心中找不到以下功能:
Iconvert如何上课?
答案 0 :(得分:1)
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();
}
}
我还建议您查看strongly typed hubs,因为它们使使用中心环境更好一些。