在MVC应用程序中,我们使用windsor容器和NUnit测试。 以下是windsor注册码:
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For<HttpContextBase>().LifeStyle.PerWebRequest.UsingFactoryMethod(() => new HttpContextWrapper(HttpContext.Current)));
container.Register(Component.For<IHttpContextBaseWrapper>().ImplementedBy<HttpContextBaseWrapper>().LifestylePerWebRequest());
container.Register(Component.For<IWebUtility>().ImplementedBy<WebUtility>().LifestylePerWebRequest());
container.Register(Component.For<IExceptionReporter>().ImplementedBy<ExceptionReporter>().LifestylePerWebRequest());
container.Register(Component.For<ICacheProvider>().ImplementedBy<WebCacheProvider>().LifestylePerWebRequest());
container.Register(Component.For<IEmailNotifier>().ImplementedBy<EmailNotifier>().LifestylePerWebRequest());
container.Register(Component.For<IUserStore<ApplicationUser>>().ImplementedBy<ApplicationUserStore<ApplicationUser>>().LifestylePerWebRequest());
container.Register(Component.For<ApplicationUserManager>().ImplementedBy<ApplicationUserManager>().LifestylePerWebRequest());
}
它可以正常的Web请求(来自浏览器),但不能从NUnit测试用例调用控制器方法。它在解析服务实例时出现以下错误。
看起来你忘了注册http模块Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule 要解决此问题,请添加
<add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Windsor" />
到<httpModules>
的{{1}}部分。
如果您计划在集成管道模式下在IIS上运行,则还需要将模块添加到web.config
下的<modules>
部分。
或者,确保您的GAC中有<system.webServer>
程序集(由ASP.NET MVC3或WebMatrix安装),Windsor将能够自动注册该模块,而无需在配置文件中添加任何内容。
我试过把
Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
在app.config / web.config中。但发现同样的错误。