代码之家  ›  专栏  ›  技术社区  ›  Yahia

如何使用HubContext通过DI从外部访问集线器属性或方法?

  •  0
  • Yahia  · 技术社区  · 6 年前

    我使用的是通过ASP.NET核心应用程序中的DI传递的hubcontext,它使用的是hub助手,如本文所述。” How can I pass a SignalR hub context to a Hangfire job on ASP .NET Core 2.1? “。基本上,我使用一个维护信号器hubcontext的助手从集线器将消息从服务器发送到连接的客户机。

    现在,我还试图通过覆盖 onConnected 我的信号枢纽方法,如本帖所述” How to iterate over users in asp.net core SignalR? “,以便能够发送单个(即专用)消息。

    问题是,建议的解决方案从集线器内部起作用,而当通过DI传递HubContext时,我只能从外部访问集线器。

    例如,在我的Hub帮助程序中,我可以访问 _hubContext.Clients 但不 _hubContext.Context 例如,或任何公共方法 连接的 .

    有什么建议吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Yahia    6 年前

    为了满足我的需要,我最终将getAllActiveConnections定义为中心中的静态连接,并将它与注入的HubContext一起从中心助手中使用。

    我的集线器包含一个静态字段:

    static HashSet<string> CurrentConnections = new HashSet<string>();
    

    以及使用此字段的静态公共方法:

    public Task GetAllActiveConnections() { ... }
    

    然后,我的中心助手使用来自中心的静态方法。

    foreach (var activeConnection in MyHub.GetAllActiveConnections())
    {
        hubcontext.Clients.Client(activeConnection).SendAsync("hi conn : " + activeConnection);
    }