相关疑难解决方法(0)

IIS7和Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule注册问题

更新:

在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"部分,因为当他们失踪时我遇到了错误.不确定他们的价值是否正确.

谁知道这里的问题是什么?

asp.net asp.net-mvc iis-7 castle-windsor web-config

5
推荐指数
1
解决办法
5947
查看次数

Castle.Windsor和HttpContextWrapper

引入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并注入我自己的工厂,以根据需要制作新的工厂?

asp.net-mvc castle-windsor httpcontext s#arp-architecture

1
推荐指数
1
解决办法
1503
查看次数