Проблема интеграции Ninject v2 с веб-формами Asp.net - PullRequest
5 голосов
/ 21 мая 2011

Я пытаюсь интегрировать 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."

Что я делаю не так?

С уважением

Lee

Ответы [ 4 ]

3 голосов
/ 05 июля 2011

У меня была такая же ошибка в моем приложении 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, и он работал просто отлично!

3 голосов
/ 17 октября 2011

При создании нового веб-приложения файл 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 голосов
/ 20 января 2012

Мой случай немного другой - я поделился с вами здесь, ребята, - тестировал его под IIS 7, затем развернул на производственном сервере, который был IIS 6.

Получил то же сообщение об ошибке ' .. но для веб-приложения ядро ​​не зарегистрировано ... Убедитесь, что в вашем проекте определено приложение NinjectHttpApplication. '

Перепробовал все вышеупомянутые решения - ни одно из них не сработало.Выяснилось, что события в Global.asax.cs были каким-то образом проигнорированы.

Чтобы решить эту проблему, я удалил файл PrecompiledApp.config - может также потребоваться переработка.

Cheers.

0 голосов
/ 25 мая 2011

Полагаю, вам также необходимо зарегистрировать модуль HttpApplicationInitializationModule

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