Windsor和HttpContextWrapper

Windsor和HttpContextWrapper

本文介绍了Castle.Windsor和HttpContextWrapper的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

HttpContextWrapper和HttpContextBase,如解释,引入使HttpContext的更多mockable /测试。

我试图用使用它,并击中了一些问题。

我的MVC控制器被设置为接受在构造一个HttpContextBase参数,在的Application_Start,HttpContextBase与Castle.Windor注册如下:

  container.Register(Component.For< HttpContextBase方式>()UsingFactoryMethod(
    ()=>新HttpContextWrapper(HttpContext.Current)));

这似乎是一个位工作确定,但后来我意识到城堡仅运行工厂方法一次,因此所有的请求得到原始HttpContextWrapper。真正需要的每个请求重新创建。对于该Castle.Windsor命令是:

  container.Register(Component.For< HttpContextBase()。
    LifeStyle.PerWebRequest.UsingFactoryMethod(
    ()=>新HttpContextWrapper(HttpContext.Current)));

...但事实证明,Castle.Windsor不允许LifeStyle.PerWebRequest内的Application_Start使用(as这里)解释

我应该怎么做?有一个简单的办法解决这还是我应该放弃HttpContextWrapper并根据需要注入我自己的工厂,使新的?


解决方案

You gotta be doing something extremely wrong here, so stop before it's too late and damage has been caused (material, moral and human casualties :-)). You already have the HttpContext inside the controller.

Don't register any HttpContexts in your DI framework. The HttpContext handling is the job of ASP.NET.

这篇关于Castle.Windsor和HttpContextWrapper的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 23:48