Внедрение HttpContext в Ninject 2 - PullRequest
       25

Внедрение HttpContext в Ninject 2

14 голосов
/ 01 сентября 2010

В моем приложении asp.net mvc я использую Ninject в качестве DI-фреймворка.

Мой HttpAccountService используется моими контроллерами для получения информации и от файлов cookie.Для этого мне нужен HttpContext.Current в HttpAccountService.Поскольку это зависимость, я вставил ее через конструктор следующим образом:

kernel.Bind<IAccountService>()
    .To<HttpAccountService>()
    .InRequestScope()
    .WithConstructorArgument("context", HttpContext.Current);

К сожалению, это всегда привязывается к одному и тому же контексту, что делает его после того, как первый запрос завершается, этот контекст устаревшим.

Как правильно вводить мой HttpContext?

1 Ответ

23 голосов
/ 01 сентября 2010

WithConstructorArgument имеет перегрузку, которая принимает Func<NinjectContext,T>, т. Е. Вы можете использовать:

... .WithConstructorArgument("context", ninjectContext => HttpContext.Current);

, который будет вызывать предоставленную лямбда-функцию 'обратного вызова' в процессе обработки запроса и получать правильное значение в тот момент времени [в отличие от того, что вы вызываете другую перегрузку и предоставляете постояннуюзначение, которое вычисляется в Bind<> время].

(Если вы не пытаетесь смоделировать контекст, я полагаю, вы рассмотрите возможность его использования встроенным)

...