从向外发送邮件中心

通过Mikael Mengistu

SignalR 中心是用于将消息发送到客户端连接到 SignalR 服务器的核心抽象。 还有可能将消息从你的应用使用中的其他位置发送IHubContext服务。 此文章介绍了如何访问 SignalRIHubContext将通知发送到外部的客户端从一个中心。

查看或下载示例代码 (如何下载)

获取 IHubContext 的实例

在 ASP.NET Core SignalR,您可以访问的实例IHubContext通过依赖关系注入。 您可以注入的实例IHubContext到控制器、 中间件或其他 DI 服务。 使用的实例将消息发送到客户端。

备注

这不同于 ASP.NET 4.x SignalR GlobalHost 用于提供对访问IHubContext ASP.NET Core具有的依赖关系注入框架,无需此全局单一实例。

注入控制器中的 IHubContext 实例

您可以注入的实例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();
}

获取中间件中的 IHubContext 实例

访问IHubContext中间件管道中如下所示:

app.Use(async (context, next) =>
{
    var hubContext = context.RequestServices
                            .GetRequiredService<IHubContext<MyHub>>();
    //...
});

备注

外部的从调用集线器方法时Hub类中,没有与调用相关联的任何调用方。 因此,没有不能访问ConnectionIdCaller,和Others属性。

注入强类型化 HubContext

若要注入强类型化 HubContext,请确保你的中心继承Hub<T> 将使用其注入IHubContext<THub, T>接口而非IHubContext<THub>

public class ChatController : Controller
{
    public IHubContext<ChatHub, IChatClient> _strongChatHubContext { get; }

    public ChatController(IHubContext<ChatHub, IChatClient> chatHubContext)
    {
        _strongChatHubContext = chatHubContext;
    }

    public async Task SendMessage(string message)
    {
        await _strongChatHubContext.Clients.All.ReceiveMessage(message);
    }
}

上一篇:在 SignalR 中使用中心 ASP.NET Core

下一篇:管理 SignalR 中的用户和组

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程