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>();
}
}
在我的 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>();
}
}