我有一个MVC 4应用程序,正在使用SignalR和依赖项注入框架。因此,我需要实现一个自定义的DependencyResolver。为了连接起来,我正在使用

        var resolver = new CustomSignalRDependencyResolver(...);
        GlobalHost.DependencyResolver = resolver;
        app.MapSignalR();


一切都按预期进行。但是,如果我使用这样的HubConfiguration对象:

        var resolver = new CustomSignalRDependencyResolver(...);
        app.MapSignalR(new HubConfiguration(
            {
                Resolver = resolver
            });


一切似乎都正常(对象已正确连接,没有任何错误或警告),但不再调用远程方法。有人可以解释第一种和第二种方法之间的区别吗?

最佳答案

我认为LarsHöppner(在此帖子上留下第一条评论的用户)是正确的。

您绝对可以使用自定义依赖项解析器而无需更改GlobalHost.DependencyResolver(SignalR测试套件经常执行此操作),但是您必须确保GlobalHost不会出现在代码的其他任何地方。

这意味着绝对没有引用:


GlobalHost.Configuration
GlobalHost.ConnectionManager
GlobalHost.TraceManager
GlobalHost.HubPipeline
当然还有GlobalHost.DependencyResolver


Lars链接到(SignalR: Sending data using GlobalHost.ConnectionManager not working)的SO帖子向您展示了如何从自定义依赖项解析器获取ConnectionManager。您可以对GlobalHost上的所有其他属性执行相同的操作。

10-06 08:30