Подтвердить что ты не робот

Инъекция HttpContext в Ninject 2

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

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

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

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

Как правильно ввести HttpContext?

4b9b3361

Ответ 1

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

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

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

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