2013-07-26 3 views
1

Используя ответы на другие вопросы здесь, на SO, мне удалось получить инъекцию зависимостей, работающую с SignalR с использованием Ninject. Но в куске моего кода я игнорировал какое-то время, и через несколько недель я снова смотрю на него - и, похоже, он перестает работать, и я не могу понять, почему.SignalR с Ninject прекратил впрыскивать зависимости концентратора

Я создаю мое 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>(); 
    } 

Я перекрывая SignalR DependencyResolver в Global.asax.cs:

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.

Это работало, а я не думаю Я изменил все, что сломало бы его - хотя, очевидно, что-то делало.

Любые предложения относительно того, что я делаю неправильно?

ответ

0

Вздох. Оказывается, я делаю это слишком часто. Это была глупая ошибка с моей стороны - хотя я действительно хотел, чтобы было сообщение об ошибке. Оказывается, что я не зарегистрировал в Ninject класс, зависящий от одного из классов, зависящего от одного из классов, зависящего от моего концентратора. (Получил?)

Смежные вопросы