Ninject 信号器依赖项解析程序无法从Javascript集线器工作

Ninject 信号器依赖项解析程序无法从Javascript集线器工作,ninject,signalr,Ninject,Signalr,我最近升级到了优秀信号器库的新版本,并将所有依赖项注入从StructureMap移到了Ninject,因为Ninject似乎得到了更好的支持 我已经使用这里描述的“从中心外部通过中心广播”使依赖项注入在服务器端通知中工作良好: 我遇到的问题是,所有来自Javascript中心的信号器消息似乎都没有触发依赖项注入 我还使用了MVC4WebAPI,这也需要一些技巧才能让依赖注入工作起来 这是我的中心: public class PresenceHub : Hub, IPresenceHub {

我最近升级到了优秀信号器库的新版本,并将所有依赖项注入从StructureMap移到了Ninject,因为Ninject似乎得到了更好的支持

我已经使用这里描述的“从中心外部通过中心广播”使依赖项注入在服务器端通知中工作良好:

我遇到的问题是,所有来自Javascript中心的信号器消息似乎都没有触发依赖项注入

我还使用了MVC4WebAPI,这也需要一些技巧才能让依赖注入工作起来

这是我的中心:

public class PresenceHub : Hub, IPresenceHub
{
    private readonly IUserRepository _userRepository;
    private readonly IFormsAuthenticationProvider _formsAuthenticationProvider;

    public PresenceHub(IFormsAuthenticationProvider formsAuthenticationProvider, IUserRepository userRepository)
    {
        _userRepository = userRepository;
        _formsAuthenticationProvider = formsAuthenticationProvider;
    }

    public void PresenceChange(string presence)
    {
        var user = _userRepository.FindById(_formsAuthenticationProvider.GetUserId());
        var rosterEntry = Mapper.Map<User, RosterEntryDto>(user);
        rosterEntry.Presence = presence;
        Clients.updatePresence(rosterEntry);
    }
}
看起来Ninject没有被调用,因为依赖项没有被注入构造函数。我需要做什么才能让依赖项注入也为Javascript调用工作

更新--

根据DFowler的建议,我在PostApplicationStart中替换了解析器。调试我可以在即时窗口中看到SignalR.GlobalHost.Resolver是NinjectDependencyResolver类型,但它仍然不工作。我得到相同的错误-没有无参数构造函数

然后,我删除了NinjectDependencyResolver NuGet库,并将源文件添加到我的解决方案中,并将其用于调试目的。对GetService和GetServices的调试表明,NinjectDependencyResolver中从未调用过这两个方法

有什么想法吗?

来自文档:


注意:不要在PreApplicationStart中重写全局冲突解决程序,它将不起作用,或者只在某些时候起作用。在PostApplicationStart(使用WebActivator)或Global.asax中执行此操作。

问题是我没有调用RouteTable.Routes.MapHubs:

GlobalHost.DependencyResolver = new SignalRNinjectResolver(NinjectWebCommon.Kernel);
RouteTable.Routes.MapHubs(new SignalRNinjectResolver(NinjectWebCommon.Kernel));
public class PresenceHubProxy : IPresenceHubProxy
{
    private readonly IHubContext _hubContext;

    public PresenceHubProxy()
    {
        _hubContext = GlobalHost.ConnectionManager.GetHubContext<PresenceHub>();
    }

    public void NotifyLogin(RosterEntryDto user)
    {
        _hubContext.Clients.updatePresence(user);
    }

    public void NotifyLogout(RosterEntryDto user)
    {
        _hubContext.Clients.updatePresence(user);
    }
}
No parameterless constructor defined for this object.
GlobalHost.DependencyResolver = new SignalRNinjectResolver(NinjectWebCommon.Kernel);
RouteTable.Routes.MapHubs(new SignalRNinjectResolver(NinjectWebCommon.Kernel));