Инъекция 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?
Ответы
Ответ 1
WithConstructorArgument
имеет перегрузку, которая принимает значение Func<NinjectContext,T>
, т.е. вы можете использовать:
... .WithConstructorArgument("context",
ninjectContext = > HttpContext.Current);
который вызовет предоставленную "обратную связь" лямбда в процессе обработки запроса и получит правильное значение в этот момент времени [в отличие от вызова другой перегрузки и подачи постоянного значения, которое вычисляется в Bind<>
время].
(Если вы не пытаетесь развязать контекст, я предполагаю, что вы будете использовать его встроенным)