如何解决在Singleton中获取AspNetCore.SinalR HubInstanceIHubContext
我想在集线器之外的Singleton类中获得SignalR IHubContext。
我这样创建单例:
this.props.work.selected
这意味着带有IHubContext参数的构造方法不起作用。 从MS Docs:
private static GameManager instance;
public static GameManager Instance
{
get
{
lock (padLock)
{
return instance ?? (instance = new GameManager());
}
}
}
是否有解决方法,所以我仍将GameManager作为Singleton并可以访问SignalR Hub来发送定时更新吗?
对不起,如果我错过了什么,对ASP.net和signalR来说我是全新的人
解决方法
我发现了一种(显然是hacky)的方式来避免依赖注入:
将静态IHubContext添加到集线器中:
public static IHubContext<GameHub> Current { get; set; }
在Startup.cs中,将IHubContext添加到集线器:
GameHub.Current = app.ApplicationServices.GetService<IHubContext<GameHub>>();
现在,您可以使用以下方法从任何地方发送邮件:
GameHub.Current.Clients.All.SendAsync("ReceiveBeat");
,
您可以将IHubContext
注入任何类中,而无需将其添加到集线器中。
因此,您删除该Current静态IHubContext并转到要在其中注入集线器的类,然后添加:
private IHubContext<GameHub> GameHub
{
get
{
return this.serviceProvider.GetRequiredService<IHubContext<GameHub>>();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。