目前我的Windsor控制器工厂运行良好。但是,我正在更改我的控制器并让Windsor为控制器实例化更多数据。我忘了更新我的安装程序类,但它失败了。
因此,我意识到这是单元测试的完美实例,因此每次运行单元测试时,都会验证Windsor是否设置正确。
因此我创建了以下单元测试:
[TestMethod]
public void Windsor_Can_Resolve_HomeController_Dependencies()
{
// Setup
WindsorContainer container = new WindsorContainer();
// Act
HomeController controller = (HomeController)container.Kernel.Resolve(typeof(HomeController));
}
这与我的WindsorControllerFactory.GetControllerInstance()
方法中存在的代码完全相同,所以我不确定为什么这不起作用。当这个运行时,我得到:
Test method MyApp.Tests.Controllers.HomeControllerTest.Windsor_Can_Resolve_HomeController_Dependencies threw exception:
Castle.MicroKernel.ComponentNotFoundException: No component for supporting the service MyApp.Controllers.HomeController was found
我不确定如何解决这个问题。我唯一能想到的是,因为它在我的测试项目中,而不是我的Asp.net MVC项目,它可能不会自动获取我的CommandAndQueryInstaller
类,其中包含我的所有windsor类型注册。
有关单元测试windsor依赖配置的建议吗?
答案 0 :(得分:5)
您正在设置中创建一个新的WindsorContainer,而不是在容器中注册任何依赖项。您需要运行IWindsorInstallers才能填充容器。
[TestMethod]
public void Windsor_Can_Resolve_HomeController_Dependencies()
{
// Setup
WindsorContainer container = new WindsorContainer();
container.Install(FromAssembly.Containing<HomeController>());
// Act
HomeController controller = container.Resolve<HomeController>();
}
请注意,您不必访问内核。你可以使用container.Resolve&lt; T&gt;(),它也会在内部处理。