在SignalR Hub上配置Autofac以获取依赖关系

时间:2012-03-19 22:15:57

标签: dependency-injection autofac signalr

我希望能够将一个SignalR集线器作为依赖项注入到其他类中,这样我就可以从服务器代码向它发送消息(独立于来自Javascript客户端的直接AJAX调用)。像这样:

    private readonly IMyApplicationHub _signalHub;

    public HomeController(IMyApplicationHub signalHub)
    {
        _signalHub = signalHub;
    }

但是,我不知道如何告诉Autofac使用哪个集线器实例 - 它似乎与真实客户端打开其连接时创建的实例不同。

我发现,如果我想引用SignalR正在使用的“真实”中心实例,我必须维护自己的Singleton引用并在第一次设置它时(在本例中为Init)从真正的Javascript客户端调用。

public class MyApplicationHub : Hub, IMyApplicationHub
{
    public static MyApplicationHub SingleInstance = null;

    public void Init(string message)
    {
        SingleInstance = this;
    }

    internal void SendMessage(string message, IEnumerable<LinkDto> links)
    {
        Clients.siteReceived(message);
    }
}

我一定错过了什么。任何援助将不胜感激! (最后,我还想知道如何构造函数 - 将依赖关系注入SignalR中心本身,但这似乎是一个稍微不同的问题。)

1 个答案:

答案 0 :(得分:4)

不要创建集线器的实例。您不应该创建控制器的实例。 documentation向您展示了如何在集线器之外获取集线器客户端的实例。

集线器是每次调用,相当于每个请求中mvc中的控制器的方式,并且您不拥有它们的创建。