Httpcontext.Session всегда равен Ninject - PullRequest
6 голосов
/ 02 декабря 2011

Я ввожу 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.

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

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

Любой код, такой как context.session ["кое-что"] = "кое-что", вызывает исключение нулевой ссылки.

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

1 Ответ

9 голосов
/ 03 декабря 2011

Если вы работаете в интегрированном режиме 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));
}
...