我有一个基本的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核心中找不到以下功能:
Iconvert我的班级怎么样?
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,因为他们使用集线器上下文更好一点。