Проблема интеграции Ninject v2 с веб-формами Asp.net
Я пытаюсь интегрировать 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. Я также добавил следующую запись httpmodule в мой web.config:
<add name="NinjectHttpModule" type="Ninject.Web.NinjectHttpModule, Ninject.Web">
Однако, когда я запускаю приложение, InvalidOperationException срабатывает со следующим:
"Тип ASP.login_aspx запрашивает инъекцию, но ядро не зарегистрировано для веб-приложения. Пожалуйста, убедитесь, что ваш проект определяет NinjectHttpApplication".
Что я делаю неправильно?
С уважением
подветренный
4 ответа
У меня была такая же ошибка в моем приложении 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>
Также я никогда не добавлял httpmodules в web.config, и он работал просто отлично!
Когда вы создаете новое веб-приложение, файл 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();
}
Мой случай немного другой - я поделился с вами здесь, ребята, - тестировал его под IIS 7, а затем развернул на производственном сервере, который был IIS 6.
Получено то же сообщение об ошибке "... но для веб-приложения ядро не зарегистрировано... Убедитесь, что в вашем проекте определено приложение NinjectHttpApplication.'
Перепробовал все вышеперечисленные решения - ни один не сработал. Выяснили, что события в Global.asax.cs были как-то проигнорированы.
Чтобы решить эту проблему, я получил файл PrecompiledApp.config
удален - может также потребоваться переработка.
Приветствия.
Я считаю, что вам также необходимо зарегистрировать HttpApplicationInitializationModule
<add name="HttpApplicationInitializationModule" type="Ninject.Web.Common.HttpApplicationInitializationModule, Ninject.Web.Common"/>