在自托管网络中使用时出现城堡温莎异常 api

castle windsor exception when using in selfhosted web api

我在自托管 Web Api(使用 OwinSelfHost)中使用 Castle Windsor,但是当我调用控制器的 Get 方法时(它只是 return 一个字符串),我面临GetService WindsorDependencyScope class 方法中的以下异常(实现 IDependencyScope ):

看起来你忘了注册 http 模块 Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule 要修复此添加 转到关于您的 web.config 的部分。 如果你计划运行在集成管道模式下的IIS上,你还需要将模块添加到下的部分。 或者确保您的 GAC 中有 Microsoft.Web.Infrastructure、Version=1.0.0.0、Culture=neutral、PublicKeyToken=31bf3856ad364e35 程序集(它由 ASP.NET MVC3 或 WebMatrix 安装)并且 Windsor 将能够注册无需向配置文件添加任何内容即可自动模块。

有什么解决办法吗?

我能找到问题所在。在 ControllerInstaller class 中,使用了导致问题的 LifestylePerWebRequest 生活方式。我不知道确切的技术原因,但是在 "Web Api 2 + self hosted with Owin " 的组合中使用温莎城堡时,我们应该使用 LifestyleScoped 而不是 LifestylePerWebRequest 。这是安装程序代码(正确的代码): public class ControllerInstaller : IWindsorInstaller { public void Install(IWindsorContainer container, IConfigurationStore store) { container.Register(Classes.FromThisAssembly() .Pick().If(t => t.Name.EndsWith("Controller")) .Configure(configurer => configurer.Named(configurer.Implementation.Name)) //.LifestylePerWebRequest() //---this caused the bug .LifestyleScoped() //the correct one ); } }