HttpContextWrapper 和 HttpContextBase,如在这里解释,被引入是为了使 HttpContext 更加可模拟/可测试。
我正在尝试使用它S#arp 架构,并遇到一些问题。
我的 MVC 控制器设置为在构造函数中接受 HttpContextBase 参数,并且在 Application_Start 期间,HttpContextBase 向 Castle.Windor 注册,如下所示:
container.Register(Component.For<HttpContextBase>().UsingFactoryMethod(
() => new HttpContextWrapper(HttpContext.Current)));
这似乎工作了一段时间,但后来我意识到 Castle 只运行该工厂方法一次,因此所有请求都会获取原始的 HttpContextWrapper。实际上,它需要为每个请求重新创建。 Castle.Windsor 命令是:
container.Register(Component.For<HttpContextBase().
LifeStyle.PerWebRequest.UsingFactoryMethod(
() => new HttpContextWrapper(HttpContext.Current)));
...但事实证明 Castle.Windsor 不允许在 Application_Start 中使用 LifeStyle.PerWebRequest (正如这里所解释的)
我应该做什么?有没有一种简单的方法可以解决这个问题,或者我应该放弃 HttpContextWrapper 并注入我自己的工厂来根据需要创建新的工厂?
我的 MVC 控制器设置为在构造函数中接受 HttpContextBase 参数
你必须做点什么极其错误在这里,所以在为时已晚并造成损害之前停止(物质、精神和人员伤亡:-))。您已经在控制器内拥有 HttpContext。
不要在 DI 框架中注册任何 HttpContext。 HttpContext 处理是 ASP.NET 的工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)