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

时间:2009-09-30 15:06:31

标签: asp.net asp.net-mvc iis-7 web-config castle-windsor

更新

在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>

system.webServer处理程序部分包含

<handlers>
  <remove name="PerRequestLifestyle"/>
  <add name="PerRequestLifestyle" preCondition="managedHandler" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Microkernel" verb="*" path="*.castle" />
</handlers>

我添加了verb="*" path="*.castle"部分,因为我在丢失时遇到错误。不确定他们的价值是否正确。

任何人都知道这里的问题是什么?

3 个答案:

答案 0 :(得分:6)

您可以通过在 configuration / system.webServer / modules 中注册HTTP模块而不是 configuration / system.web / httpModules 来解决问题。

答案 1 :(得分:4)

我的问题是我在Application_Start引导容器,在ASP.NET中的那个时候模块没有初始化,所以当你尝试注册/使用PerWebRequest生活方式它会抛出异常,因为它检测到模块未初始化。

我最终使用this library中的Castle Contrib来提供HybridPerWebRequestTransient生活方式,如果目前尚未初始化,则会使用瞬态生活方式。

你只需要下载库(因为zip是可以的)打开解决方案并编译它,获取生成的DLL并在你的项目中引用它。

如果您使用的Castle.Windsor版本超过3.0,您将不得不删除当前对它的引用并添加对您正在使用的版本的引用(我使用3.1并且没有任何问题)。

这是使用生活方式的代码:.LifeStyle.HybridPerWebRequestTransient()

答案 2 :(得分:1)

我花了一些时间为此找到解决方案,但我所需要的只是更新web.config中引用的dll ......

使用Castle.Core和Windsor 2.5.1 ......