在我的MVC 5应用程序中,我想获得对Hub方法的外部访问。 我就像他们在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;
}
但在我的情况下,底部的私有构造函数永远不会被调用,所以&#34; hubcontext&#34;当我尝试用它做某事时,它总是为空。
我感觉并没有理解该示例代码段的重要部分。
非常感谢!
答案 0 :(得分:0)
那不行,你能做的就是这个
public GameModel(ApplicationDbContext context, GameRoom room) : this(GlobalHost.ConnectionManager.GetHubContext<GameRoomHub>())
{
this.db = context;
this.gameroom = room;
}
然而,直接依赖SignalR是不好的做法,而GlobalHost.ConnectionManager.GetHubContext是一个服务定位器模式,也是一种反模式。
如何使用带有SignalR的IoC(例如Ninject)进行读取,然后就可以执行此操作。
public class SignalRAbstraction : IAbstraction
{
public SignalRAbstraction(IConnectionManager connectionManager)
{
var hubContext = connectionManager.GetHubContext<GameRoomHub>();
}
}