Signalr 无法在配置中将DependencyResolver传递给MapSignaler

Signalr 无法在配置中将DependencyResolver传递给MapSignaler,signalr,Signalr,我有一个MVC4应用程序,其中我使用了SignalR和依赖注入框架。因此,我需要实现一个自定义DependencyResolver。为了把它连接起来,我用 var resolver = new CustomSignalRDependencyResolver(...); GlobalHost.DependencyResolver = resolver; app.MapSignalR(); 一切都按预期进行。但是,如果我使用如下HubConfigur

我有一个MVC4应用程序,其中我使用了SignalR和依赖注入框架。因此,我需要实现一个自定义DependencyResolver。为了把它连接起来,我用

        var resolver = new CustomSignalRDependencyResolver(...);
        GlobalHost.DependencyResolver = resolver;
        app.MapSignalR();
一切都按预期进行。但是,如果我使用如下HubConfiguration对象:

        var resolver = new CustomSignalRDependencyResolver(...);
        app.MapSignalR(new HubConfiguration(
            {
                Resolver = resolver
            });
一切似乎都正常(对象已正确连接,没有任何错误或警告),但远程方法不再被调用。有人能解释第一种方法和第二种方法之间的区别吗?

我假设您正在执行第二种方法,但仍在尝试使用
GlobalHost
依赖项解析程序

如果通过第二种方法连接自定义依赖项解析程序,
GlobalHost
的依赖项解析程序将与传递到自定义集线器配置中的依赖项解析程序不同

因此,为了仍然使用GlobalHost对象,您需要执行第二种方法并设置GlobalHost依赖项解析器:

var resolver = new CustomSignalRDependencyResolver(...);
app.MapSignalR(new HubConfiguration(
{
    Resolver = resolver
});
GlobalHost.DependencyResolver = resolver;
希望这有帮助

我认为Lars Höppner(在这篇文章上留下第一条评论的用户)是对的

您完全可以使用自定义依赖项解析程序,而无需更改
GlobalHost.DependencyResolver
(SignalR测试套件经常这样做),但您必须确保
GlobalHost
不会显示在代码中的任何其他地方

这意味着绝对没有提及:

  • GlobalHost.Configuration
  • GlobalHost.ConnectionManager
  • GlobalHost.TraceManager
  • GlobalHost.hubbippeline
  • 当然还有GlobalHost.DependencyResolver

链接到()的SO post LAR向您展示了如何从自定义依赖项解析器获取ConnectionManager;您可以对GlobalHost上的所有其他属性执行相同的操作。

您不需要设置全局冲突解决程序,如果您设置了自定义冲突解决程序,则无法将全局主机用于任何事情。@LarsHöppner的答案是正确的。否。在我的第二种方法中,我没有使用GlobalHost。那么应该不会有问题,它在场景背后都是一样的,这正是我的想法。。。因此,我的问题是。