在自主Web api中使用时,城堡windsor异常

时间:2017-06-08 14:43:23

标签: c# asp.net-web-api owin castle-windsor self-hosting

我在自托管的Web Api(使用OwinSelfHost)中使用Castle Windsor,但是当我调用控制器的Get方法(它只返回一个字符串)时,我在 GetService <中遇到以下异常/ b> WindsorDependencyScope 类的方法(实现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将能够自动注册该模块无需在配置文件中添加任何内容。

的 任何解决方案?

1 个答案:

答案 0 :(得分:0)

我能找到问题所在。在ControllerInstaller类中,使用了LifestylePerWebRequest生活方式导致问题。我不知道确切的技术原因,但是当使用Windsor城堡组成的&#34; Web Api 2 +自己托管Owin&#34;时,我们应该使用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 ); } }