微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Singleton中获取AspNetCore.SinalR HubInstanceIHubContext

如何解决在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 举报,一经查实,本站将立刻删除。