我正在尝试将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。”
我做错了什么?
亲切的问候
利
答案 0 :(得分:3)
我在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,它工作得很好!
答案 1 :(得分:3)
创建新的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();
}
答案 2 :(得分:2)
我的情况有点不同 - 我想在这里与你们分享 - 在IIS 7下进行测试然后将其部署在IIS 6的生产服务器上。
得到相同的错误消息' ..但是没有为Web应用程序注册内核...请确保您的项目定义了NinjectHttpApplication。'
尝试了所有上述解决方案 - 没有成功。 发现Global.asax.cs中的事件被忽略了。
为了解决这个问题,我删除了文件PrecompiledApp.config
- 可能还需要回收。
干杯。
答案 3 :(得分:0)
我相信你还需要注册HttpApplicationInitializationModule
<add name="HttpApplicationInitializationModule" type="Ninject.Web.Common.HttpApplicationInitializationModule, Ninject.Web.Common"/>