如何通过 DI 使用 hubcontext 从外部访问 hub 属性或方法?

How to access hub properties or methods from the outside using hubcontext via DI?

我在我的 ASP.Net 核心应用程序中使用通过 DI 传递的 hubcontext,它使用 post“”中描述的 hub 助手。基本上,我正在使用维护 SignalR hubContext 的帮助程序将消息从集线器外部从服务器发送到连接的客户端。

现在,我还试图通过覆盖 onConnected method of my SignalR hub as described in this post "" 来保留我连接的客户端的列表,以便能够发送单独的(即专门的)消息。

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

因此,例如在我的集线器助手中,我可以访问 _hubContext.Clients 但不能访问 _hubContext.Context 或任何 public 方法,例如 onConnected.

有什么建议吗?

根据我的需要,我最终在集线器中将 GetAllActiveConnections 定义为静态,并从集线器助手中将其与注入的集线器上下文结合使用。

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

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

和使用此字段的静态 public 方法:

public Task GetAllActiveConnections() { ... }

然后我的集线器助手使用集线器中的静态方法。

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