在Ninject 2中注入HttpContext

时间:2010-09-01 11:20:35

标签: dependency-injection ninject httpcontext

在我的asp.net mvc应用程序中,我使用Ninject作为DI框架。

我的HttpAccountService由我的控制器用于从cookie获取信息。 为此,我需要HttpAccountService中的HttpContext.Current。 由于这是一个依赖项,我通过构造函数注入它:

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

可悲的是,这总是绑定到相同的上下文,这使得在第一个请求完成后,这个上下文变得过时。

我应该如何正确地注入我的HttpContext?

1 个答案:

答案 0 :(得分:23)

WithConstructorArgument的重载需要Func<NinjectContext,T>,即您可以使用:

  

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

将在请求处理中调用提供的'callback'lambda并在该时间点获取正确的值[与您调用另一个重载并提供在Bind<>时间计算的常量值相反]

(如果您没有尝试模拟上下文,我假设您会考虑使用它内联)