在我的asp.net mvc应用程序中,我使用Ninject作为DI框架。
我的HttpAccountService由我的控制器用于从cookie获取信息。 为此,我需要HttpAccountService中的HttpContext.Current。 由于这是一个依赖项,我通过构造函数注入它:
kernel.Bind<IAccountService>()
.To<HttpAccountService>()
.InRequestScope()
.WithConstructorArgument("context", HttpContext.Current);
可悲的是,这总是绑定到相同的上下文,这使得在第一个请求完成后,这个上下文变得过时。
我应该如何正确地注入我的HttpContext?
答案 0 :(得分:23)
WithConstructorArgument
的重载需要Func<NinjectContext,T>
,即您可以使用:
...
.WithConstructorArgument("context",
ninjectContext =&gt;HttpContext.Current);
将在请求处理中调用提供的'callback'lambda并在该时间点获取正确的值[与您调用另一个重载并提供在Bind<>
时间计算的常量值相反]
(如果您没有尝试模拟上下文,我假设您会考虑使用它内联)