Свойство HttpContext.Сеанс всегда равен null с Ninject

Я впрыскиваю httpcontext, используя ninject, как это

private void RegisterDependencyResolver()
{
    HttpContextBase context = new HttpContextWrapper(HttpContext.Current);
    var kernel = new StandardKernel();
    kernel.Bind<ISession>().To<SessionService>()
                            .InRequestScope()
                           .WithConstructorArgument("context", ninjectContext => context);

    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
}

RegisterDependencyResolver () вызывается в методе application_start.

этот интерфейс вводится в конструктор класса, который обрабатывает сессии.

проблема в том, что сеанс никогда не инициализируется, поэтому я не могу ничего добавить к нему.

любой код, как контекст.сессия["что-то"] ="что-то" поднимает пустой ссылкой исключение.

Is Событий Application_Start слишком рано в жизненном цикле? Я думал.InRequestScope () исправляет это, но это не работает для меня.

1 ответов


Если вы работаете в интегрированном режиме IIS, у вас нет доступа к любому объекту контекста Http в Application_Start.

попробуйте так:

private void RegisterDependencyResolver()
{
    kernel
        .Bind<ISession>()
        .To<SessionService>()
        .InRequestScope()
        .WithConstructorArgument(
            "context", 
            ninjectContext => new HttpContextWrapper(HttpContext.Current)
        );

    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
}