我有一个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上的所有其他属性执行相同的操作。