【问题标题】:Problem Integrating Ninject v2 with Asp.net Webforms将 Ninject v2 与 Asp.net Webforms 集成的问题
【发布时间】:2011-08-30 04:08:09
【问题描述】:

我正在尝试将 Ninject v2 与我的 asp.net webforms 项目集成。我正在运行 .NET Framework 4.0。

我的 global.asax 继承自 Ninject.Web.NinjectHttpApplication。我还添加了 CreateKernel 方法:

protected override IKernel CreateKernel()
{
  IKernel kernel = new StandardKernel();
  kernel.Bind<IUser>().To<User>();
  return kernel;
}

我所有的页面都继承自 Ninject.Web.PageBase。我还在我的 web.config 中添加了以下 httpmodule 条目:

<add name="NinjectHttpModule" type="Ninject.Web.NinjectHttpModule, Ninject.Web">

但是,当我运行应用程序时,会触发 InvalidOperationException,并显示以下内容:

“类型 ASP.login_aspx 请求注入,但尚未为 Web 应用程序注册内核。请确保您的项目定义了 NinjectHttpApplication。”

我做错了什么?

亲切的问候

【问题讨论】:

    标签: c# webforms ninject


    【解决方案1】:

    我在 ASP.NET 4.0 Webforms 应用程序中遇到了同样的错误。 我通过使用带有代码的唯一“Global.asax”文件而不是后面的“Global.asax”+“Global.asax.cs”代码来解决这个问题。例如。您可以使用这个独立的“Global.asax”文件:

    <%@ Application Language="C#" Inherits="Ninject.Web.NinjectHttpApplication" %>
    <%@ Import Namespace="Ninject" %>
    
    <script runat="server">
        protected override IKernel CreateKernel() {
            var kernel = new StandardKernel();
            kernel.Bind<IUser>().To<User>();
            return kernel;
        }
    </script>
    

    此外,我从未在 web.config 中添加任何 httpmodules,而且效果很好!

    【讨论】:

      【解决方案2】:

      当您创建一个新的 Web 应用程序时,Global.asax.cs 文件中填充了空方法:

          void Application_Start(object sender, EventArgs e)
          {
              // Code that runs on application startup
          }
      

      NinjectHttpApplication 也实现了这些方法,但是生成的 Global.asax.cs 中的空方法从不调用 NinjectHttpApplication 上的方法。要解决此问题,请删除空方法或添加对基方法的调用:

          void Application_Start(object sender, EventArgs e)
          {
              base.Application_Start();
          }
      

      【讨论】:

        【解决方案3】:

        我的情况有点不同 - 我想在这里与你们分享 - 在 IIS 7 下对其进行测试,然后将其部署在 IIS 6 的生产服务器上。

        收到相同的错误消息'..但没有为 Web 应用程序注册内核...请确保您的项目定义了 NinjectHttpApplication。'

        尝试了上述所有解决方案 - 均未奏效。 发现 Global.asax.cs 中的事件被忽略了。

        为了解决这个问题,我删除了文件 PrecompiledApp.config - 可能还需要回收。

        干杯。

        【讨论】:

          【解决方案4】:

          相信你也需要注册HttpApplicationInitializationModule

          <add name="HttpApplicationInitializationModule" type="Ninject.Web.Common.HttpApplicationInitializationModule, Ninject.Web.Common"/>
          

          【讨论】:

          • Ninject.Web.Common 在 2.2 版本中不存在
          • @Lee,确实如此,它是一个单独的程序集。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-02
          相关资源
          最近更新 更多