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

时间:2013-07-26 20:43:11

标签: c# 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 个答案:

答案 0 :(得分:0)

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