问题描述
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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!