4

I'm getting an the following error when I try and start my WebForms application, with Ninject.Web (v3) installed.

"The static container already has a kernel associated with it!"

I'm implementing Ninject in Global.asax inheriting from NinjectHttpApplication and overriding CreateKernel() with my module being in the following form

public class NinjectWebModule: NinjectModule
    {
        public override void Load()
        {
            Bind<IBlah>().To<Blah>();
        }
    }

I basically followed the setup advice contained How can I implement Ninject or DI on asp.net Web Forms?

The yellow screen of pain says

[NotSupportedException: The static container already has a kernel associated with it!]
   Ninject.Web.KernelContainer.set_Kernel(IKernel value) in c:\Projects\Ninject\ninject.web\src\Ninject.Web\KernelContainer.cs:38
   Ninject.Web.NinjectWebHttpApplicationPlugin.Start() in c:\Projects\Ninject\ninject.web\src\Ninject.Web\NinjectWebHttpApplicationPlugin.cs:62
   Ninject.Web.Common.Bootstrapper.<Initialize>b__0(INinjectHttpApplicationPlugin c) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\Bootstrapper.cs:52
   Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map(IEnumerable`1 series, Action`1 action) in c:\Projects\Ninject\ninject\src\Ninject\Infrastructure\Language\ExtensionsForIEnumerableOfT.cs:32
   Ninject.Web.Common.Bootstrapper.Initialize(Func`1 createKernelCallback) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\Bootstrapper.cs:52
   Ninject.Web.Common.NinjectHttpApplication.Application_Start() in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\NinjectHttpApplication.cs:80

[HttpException (0x80004005): The static container already has a kernel associated with it!]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +9859725
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +172
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +336
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296

[HttpException (0x80004005): The static container already has a kernel associated with it!]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9873912
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254

Any ideas?

Community
  • 1
  • 1
ActualAl
  • 1,192
  • 10
  • 13

1 Answers1

6

Doh! Installing Ninject.Web (v3) adds an App_Start folder with NinjectWebCommon.cs

This is where you register your bindings and not in the Global.asax

ActualAl
  • 1,192
  • 10
  • 13
  • True, but if you want anything to be injected in global.asax you need to derive from NinjectHttpApplication, which requires the implementation of CreateKernel. You can provide the same one from App_Start, but it throws the error mentioned above. – MoonStom Jul 03 '15 at 23:07
  • Awesome find ActualAI. @MoonStorm: If we are to inject anything in global.asax.cs as you mentioned, how would we go about it? Because as mentioned by ActualAI, implementing NinjectHttpApplication in Global.asax.cs required to implement CreateKernel, which throws this error. How do we get the already instantiated kernel in global.asax.cs? – Syed Waqas Dec 27 '16 at 16:38