【问题标题】:Ninject 3 in WebFormsWebForms 中的 Ninject 3
【发布时间】:2012-11-15 06:50:13
【问题描述】:

当我尝试启动安装了 Ninject.Web (v3) 的 WebForms 应用程序时遇到以下错误。

“静态容器已经有一个与之关联的内核!”

我在 Global.asax 中实现 Ninject,继承自 NinjectHttpApplication 并覆盖 CreateKernel(),我的模块采用以下形式

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

我基本上遵循了How can I implement Ninject or DI on asp.net Web Forms?中的设置建议

疼痛的黄屏说

[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

有什么想法吗?

【问题讨论】:

    标签: ninject ninject.web


    【解决方案1】:

    哇!安装 Ninject.Web (v3) 会添加一个带有 NinjectWebCommon.cs 的 App_Start 文件夹

    这是您注册绑定的地方,而不是 Global.asax

    【讨论】:

    • 没错,但是如果你想在 global.asax 中注入任何东西,你需要从 NinjectHttpApplication 派生,这需要实现 CreateKernel。您可以从 App_Start 提供相同的,但它会引发上述错误。
    • 很棒的发现 ActualAI。 @MoonStorm:如果我们要像你提到的那样在 global.asax.cs 中注入任何东西,我们会怎么做?因为正如 ActualAI 所说,在 Global.asax.cs 中实现 NinjectHttpApplication 需要实现 CreateKernel,这会引发这个错误。我们如何在 global.asax.cs 中获取已经实例化的内核?
    猜你喜欢
    • 1970-01-01
    • 2011-10-19
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 2012-09-04
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多