Проблема интеграции 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"/>
Другие вопросы по тегам