使用NUnit测试的Castle Windsor问题 - 实例未正确初始化

时间:2016-11-30 10:03:04

标签: asp.net-mvc unit-testing dependency-injection nunit castle-windsor

在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中

。但发现同样的错误。

0 个答案:

没有答案