Dependency injection 配置Autofac以依赖于信号集线器

Dependency injection 配置Autofac以依赖于信号集线器,dependency-injection,autofac,signalr,Dependency Injection,Autofac,Signalr,我希望能够将signarhub作为一个依赖项注入到其他类中,这样我就可以从服务器代码向它发送消息,而不依赖于来自Javascript客户端的直接AJAX调用。像这样: private readonly IMyApplicationHub _signalHub; public HomeController(IMyApplicationHub signalHub) { _signalHub = signalHub; } 但是,我不知道如何告诉Aut

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

    private readonly IMyApplicationHub _signalHub;

    public HomeController(IMyApplicationHub signalHub)
    {
        _signalHub = signalHub;
    }
但是,我不知道如何告诉Autofac要使用哪个hub实例——它似乎与实际客户端打开连接时创建的实例不同

我发现,如果我想引用signar正在使用的真正的hub实例,我必须维护自己的单例引用,并在第一次从真正的Javascript客户端调用方法Init时设置它

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);
    }
}

我一定错过了什么。任何帮助都将不胜感激!最后,我还想知道如何将依赖项注入到信号集线器本身,但这似乎是一个稍微不同的问题。

不要创建集线器的实例。与不应创建控制器实例的方式相同。向您展示了如何在中心外部获取中心客户端的实例


集线器是每个调用的,相当于mvc中的控制器是如何处理每个请求的,并且您不拥有集线器的创建。

不要创建集线器的实例。与不应创建控制器实例的方式相同。向您展示了如何在中心外部获取中心客户端的实例


集线器是每次调用的,相当于mvc中的控制器是如何处理每个请求的,并且您不拥有集线器的创建。

您可以发布注册吗?如果您已经有了一个可以工作的单例,Autofac可以很容易地注入它。为什么要在控制器中创建hub的实例?直接打电话给中心就可以了。你能把注册信息寄出去吗?如果您已经有了一个可以工作的单例,Autofac可以很容易地注入它。为什么要在控制器中创建hub的实例?直接给中心打电话就行了。