我需要在HUB之外发送信息给连接的客户端。
public static class Notification{
public static void SendMessage(){
//... Do some stuff
MyHub.Clients.All.SendAsync("sendInfo");
}
}
如何实例化HUB?
据我所知,你可以使用IHubContext服务在Hub之外发送服务消息。
如果你在startup.cs中的ConfigureServices中注册了服务,那么你可以通过依赖注入来访问IHubContext的实例。
services.AddSignalR();
例如在控制器中注入一个IHubContext的实例。
public class HomeController : Controller
{
private readonly IHubContext<NotificationHub> _hubContext;
public HomeController(IHubContext<NotificationHub> hubContext)
{
_hubContext = hubContext;
}
}
现在,有了对IHubContext实例的访问,你就可以像在集线器中一样调用集线器的方法。
public async Task<IActionResult> Index()
{
await _hubContext.Clients.All.SendAsync("Notify", $"Home page loaded at: {DateTime.Now}");
return View();
}
更多细节,你可以参考这个 文章.
你可以像@张兰多上面发布的那样做,或者直接将Hub注入到你的控制器或管理器中,比如。
控制器
private IHubContext<YourHub, IYourHub> YourHub
{
get
{
return this.HttpContext.RequestServices.GetRequiredService<IHubContext<YourHub, IYourHub>>();
}
}
其他
private IHubContext<YourHub, IYourHub> YourHub
{
get
{
return this.serviceProvider.GetRequiredService<IHubContext<YourHub, IYourHub>>();
}
}
PS:建议注入HubContext,而不是直接注入Hub。