SignalR:根据官方文档,无法获得外部Hub访问

时间:2015-04-08 10:58:34

标签: c# asp.net asp.net-mvc signalr signalr-hub

在我的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;当我尝试用它做某事时,它总是为空。

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

非常感谢!

1 个答案:

答案 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>();
    }

}