【发布时间】:2020-09-17 00:07:41
【问题描述】:
我正在使用SignalR v2.41,它很旧,但我必须使用它,因为我也仅限于使用旧版本的 MVC。除此之外,我还使用FluentScheduler 定期向客户发送有针对性的消息。
问题是,我在 Hub 中保留了用户连接字典:
public class MyHub: Hub
{
public Dictionary<string, User> Connections { get; set; }
public MyHub()
{
Connections = new Dictionary<string, User>();
}
public override Task OnConnected()
{
// add connection
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
// remove connection
return base.OnDisconnected(stopCalled);
}
}
现在,在 FluentScheduler 代码中,我需要获取连接列表的集线器,以便知道要向哪个连接发送内容:
public class MyJob : IJob
{
public void Execute()
{
var hub = new DefaultHubManager(GlobalHost.DependencyResolver).ResolveHub("MyHub") as MyHub;
foreach (var conn in hub.Connections)
{
foreach (var msg in msgs)
{
hub.Clients.Client(conn.Key).send(msg);
}
}
}
}
问题是,我使用var hub = new DefaultHubManager(GlobalHost.DependencyResolver).ResolveHub("MyHub") as MyHub; 获得的hub 实例与客户端连接的实例不同,因为这个实例从来没有任何连接。
如何获得正确的集线器实例?
【问题讨论】:
标签: c# asp.net-mvc dependency-injection signalr fluentscheduler