带有Ninject的SignalR已停止注入集线器依赖项

在SO上使用对其他问题的回答,我设法使用Ninject使用SignalR进行依赖注入 . 但是在我的代码中,我忽略了一段时间,几周之后我又回头看了它 - 它似乎停止了工作,我似乎无法弄清楚为什么 .

我正在适当地创建我的Ninject内核:

private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

        RegisterServices(kernel);
        Kernel = kernel;
        return kernel;
    }

    private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
        kernel.Bind<ISessionWrapper>().To<SessionWrapper>();

        kernel.Bind<IPayboardEntities>().To<PayboardEntities>().InRequestScope();
        kernel.Bind<IAuthenticationService>().To<AuthenticationService>().InRequestScope();
        kernel.Bind<IAuthorizationService>().To<AuthorizationService>().InRequestScope();
        kernel.Bind<ITokenService>().To<TokenService>().InRequestScope();
        kernel.Bind<fsIntegrations.RealtimeService>().To<fsIntegrations.RealtimeService>().InRequestScope();

        kernel.Bind<IDataServiceFactory>()
            .To<fsIntegrations.DataServiceFactory>()
            .InSingletonScope()
            .WithConstructorArgument("kernel", kernel);

        kernel.Bind<IntegrationHub>().To<IntegrationHub>();
        kernel.Bind<CustomerHub>().To<CustomerHub>();
    }

我正在覆盖Global.asax.cs中的SignalR DependencyResolver:

protected void Application_Start()
    {
        XmlConfigurator.Configure();

        // To support Ninject with SignalR
        // See http://stackoverflow.com/questions/14706530/ninject-dependency-injection-for-signalr
        GlobalHost.DependencyResolver = new SignalRNinjectDependencyResolver(NinjectWebCommon.Kernel);

        // Register the default hubs route: ~/signalr
        RouteTable.Routes.MapHubs();

        AreaRegistration.RegisterAllAreas(); 

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        BootstrapBundleConfig.RegisterBundles(BundleTable.Bundles);
        SimpleSocialAuthBundleConfig.RegisterBundles(BundleTable.Bundles);
    }

但是当SignalR尝试创建我的任何集线器(我正在使用构造函数注入)时,它会抛出此异常:

System.MissingMethodException: No parameterless constructor defined for this object.

这曾经有用,而且我认为我没有改变任何会破坏它的东西 - 虽然显然有些东西 .

关于我做错了什么的任何建议?

回答(1)

2 years ago

叹 . 事实证明我经常这样做 . 这对我来说是一个愚蠢的错误 - 尽管我确实希望有更好的错误信息 . 事实证明我没有在Ninject上注册一个类,这个类依赖于我的中心依赖的一个类所依赖的类 . (了解?)