更新:
在 Windsor 2.5 中,程序集名称是Castle.Windsor
而不是Castle.MicroKernel
我正在尝试将一个 ASP.NET MVC 应用程序部署到 IIS7,我收到此错误:
看起来您忘记在 web.config 的部分注册 http 模块 Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule 添加''
我的 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 回答
您可以通过在configuration/system.webServer/modules而不是configuration/system.web/httpModules中注册 HTTP 模块来解决问题。
我的问题是我在
Application_Start
中引导容器,模块在 ASP.NET 中没有初始化,所以当你尝试 register/usePerWebRequest
Lifestyle 它会抛出异常,因为它检测到模块没有被初始化。我最终使用了来自城堡贡献的这个图书馆,这提供了
HybridPerWebRequestTransient
Lifestyle,如果现在没有初始化,则使用 Transient Lifestyle。你只需要下载库(因为 zip 是可以的)打开解决方案并编译它,获取生成的 DLL 并在项目中引用它。
如果您使用 Castle.Windsor 版本而不是 3.0,则必须删除对它的当前引用并添加对您正在使用的版本的引用(我使用 3.1 并且没有任何问题)。
这是使用生活方式的代码:
.LifeStyle.HybridPerWebRequestTransient()
花了我一些时间为此找到一个解决方案,但我只需要更新 web.config...中引用的 dll。
使用 Castle.Core 和 Windsor 2.5.1...