我在自托管的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将能够自动注册该模块无需在配置文件中添加任何内容。
的 任何解决方案?
答案 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
);
}
}