SignalR:根据官方文档无法获得外部集线器访问权限

SignalR: Can't get external Hub access according to official documentation

在我的 MVC 5 应用程序中,我想从外部访问我的集线器方法。 我就像他们在 official documentation

中说的那样做了

我的版本:

public class GameModel
{
    ApplicationDbContext db;
    GameRoom gameroom;

    public GameModel(ApplicationDbContext context, GameRoom room)
    {
        this.db = context;
        this.gameroom = room;
    }

    //Allows GameRoomHub method calls 
    private readonly static Lazy<GameModel> _instance = new Lazy<GameModel>(
    () => new GameModel(GlobalHost.ConnectionManager.GetHubContext<GameRoomHub>()));

    private IHubContext hubcontext;

    private GameModel(IHubContext context)
    {
        hubcontext = context;
    }

但在我的例子中,底部的私有构造函数永远不会被调用,所以当我尝试用它做一些事情时 "hubcontext" 总是 null。

我觉得我没有理解该示例代码片段的重要部分。

非常感谢!

那不行,你能做的就是这个

 public GameModel(ApplicationDbContext context, GameRoom room) : this(GlobalHost.ConnectionManager.GetHubContext<GameRoomHub>())
    {
        this.db = context;
        this.gameroom = room;
    }

然而,直接依赖 SignalR 是不好的做法,此外 GlobalHost.ConnectionManager.GetHubContext 是一种服务定位器模式,也是一种反模式。

阅读有关如何将 IoC 与 SignalR 结合使用的信息 Ninject,然后您就可以执行此操作。

public class SignalRAbstraction : IAbstraction 
{

    public SignalRAbstraction(IConnectionManager connectionManager) 
    {
       var hubContext = connectionManager.GetHubContext<GameRoomHub>();
    }

}