Используя ответы на другие вопросы здесь, на 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.
Это работало, а я не думаю Я изменил все, что сломало бы его - хотя, очевидно, что-то делало.
Любые предложения относительно того, что я делаю неправильно?