更新:
在Windsor 2.5中,程序集名称Castle.Windsor不是Castle.MicroKernel
我正在尝试将ASP.NET MVC应用程序部署到IIS7,我收到此错误:
看起来你忘了注册http模块Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule在你的web.config部分添加''
我的httpModules包含:
<httpModules>
<add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.MicroKernel"/>
</httpModules>
Run Code Online (Sandbox Code Playgroud)
system.webServer处理程序部分包含
<handlers>
<remove name="PerRequestLifestyle"/>
<add name="PerRequestLifestyle" preCondition="managedHandler" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Microkernel" verb="*" path="*.castle" />
</handlers>
Run Code Online (Sandbox Code Playgroud)
我添加了verb="*" path="*.castle"部分,因为当他们失踪时我遇到了错误.不确定他们的价值是否正确.
谁知道这里的问题是什么?
引入HttpContextWrapper和HttpContextBase,如此处所述,使HttpContext更具可模拟性/可测试性.
我正在尝试将它与S#arp架构一起使用,并遇到一些问题.
我的MVC控制器被设置为在构造函数中接受HttpContextBase参数,并且在Application_Start期间,HttpContextBase在Castle.Windor中注册,如下所示:
container.Register(Component.For<HttpContextBase>().UsingFactoryMethod(
() => new HttpContextWrapper(HttpContext.Current)));
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但后来我意识到Castle只运行一次Factory方法,所以所有请求都获得了原始的HttpContextWrapper.真的需要为每个请求重新创建它.Castle.Windsor命令将是:
container.Register(Component.For<HttpContextBase().
LifeStyle.PerWebRequest.UsingFactoryMethod(
() => new HttpContextWrapper(HttpContext.Current)));
Run Code Online (Sandbox Code Playgroud)
...但事实证明,Castle.Windsor不允许在Application_Start中使用LifeStyle.PerWebRequest(如此处所述)
我该怎么办?有没有一个简单的方法围绕这个或我应该放弃HttpContextWrapper并注入我自己的工厂,以根据需要制作新的工厂?