2011-04-24 12 views
14

Tengo el siguiente prueba de la unidad en mi solicitud:unidad de probar mi controlador para asegurarse de Windsor puede resolver las dependencias cuando se utiliza PerWebRequestLifestyle

[TestMethod] 
    public void Windsor_Can_Resolve_HomeController_Dependencies() 
    { 
     // Setup 
     WindsorContainer container = new WindsorContainer(); 
     container.Install(FromAssembly.Containing<HomeController>()); 

     // Act 
     container.Kernel.Resolve(typeof(HomeController)); 
    } 

El punto de esto es para asegurarse de que no tengo cualquier problema de configuración de windsor del que no me percataré hasta que acceda a una acción en ese controlador. El problema es que todos mis registros de objetos están registrados como PerWebRequestLifestyle, por lo que no tengo problemas con el contexto de datos de Entidad Framwork que se comparte entre las solicitudes web (lo que causa errores cuando se ejecutan varias acciones).

Sin embargo, cada vez que corro esta prueba de la unidad me sale el siguiente excepción:

System.InvalidOperationException: HttpContext.Current es nulo. PerWebRequestLifestyle solo se puede usar en ASP.Net

¿Cómo puedo hacer para probar este escenario sin cambiar el estilo de vida de mis comandos de registro de objetos?

Respuesta

18

No sé si puede usar el PerWebRequestLifestyle fuera de ASP.NET (MVC) (no creo que pueda), pero puede usar un IContributeComponentModelConstruction to modify the lifestyle of the components when they are registered.

Esto le permitiría probar (integrar) el contenedor sin modificar ninguno de sus instaladores.

+0

Excelente, eso funcionó a la perfección :) – KallDrexx

+0

Esto no funcionó para mí, sin embargo, esta respuesta SO hizo http://stackoverflow.com/questions/5781599/testing-castle-windsor-component-with-perwebrequest-lifestyle –

Cuestiones relacionadas