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

时间:2018-12-09 18:24:16

标签: c# asp.net-core signalr hangfire asp.net-core-signalr

我正在ASP.Net Core应用程序中使用通过集线器帮助程序通过DI传递的集线器上下文,如本文“ How can I pass a SignalR hub context to a Hangfire job on ASP .NET Core 2.1?”中所述。基本上,我使用的是一个维护SignalR hubContext的帮助程序,以将消息从集线器外部从服务器发送到连接的客户端。

现在,我还试图通过覆盖SignalR集线器的onConnected方法(如本文“ How to iterate over users in asp.net core SignalR?”中所述)来保留已连接客户端的列表,以便能够发送个人(即专用)消息。

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

例如,在我的中心帮助器中,我可以访问_hubContext.Clients但不能访问_hubContext.Context或诸如onConnected之类的任何公共方法。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

出于我的需要,我最终在集线器中将GetAllActiveConnections定义为静态,然后从集线器帮助程序中结合注入的hubcontext使用它。

我的中心包含一个静态字段:

public Task GetAllActiveConnections() { ... }

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

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

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

{{1}}