No puedo configurar Windsor Container con asp.net web api, aunque funciona bien con el controlador regular (IController).No se pueden inyectar dependencias en Asp.net MVC 4 Web API Controller usando Windsor Container
Tengo el controlador regular y el controlador de API en el mismo proyecto.
Aquí está el código para el controlador regular que trabajar muy bien:
/// <summary>
/// Controller Factory class for instantiating controllers using the Windsor IoC container.
/// </summary>
public class WindsorControllerActivator : IControllerActivator
{
private readonly IWindsorContainer container;
public WindsorControllerActivator(IWindsorContainer container)
{
this.container = container;
}
public IController Create(RequestContext requestContext, Type controllerType)
{
var controller = (IController)container.GetService(controllerType);
return controller;
}
}
y en global.asax.cs
container.Register(Component.For<IWindsorContainer>().Instance(container));
container.Register(Component.For<IControllerActivator>().ImplementedBy<WindsorControllerActivator>());
y a continuación es el código problemático:
public class WindsorApiControllerActivator : IHttpControllerActivator
{
private readonly IWindsorContainer container;
public WindsorApiControllerActivator(IWindsorContainer container)
{
this.container = container;
}
public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
{
var controller = (IHttpController)container.GetService(controllerType);
return controller;
}
}
e instalador:
container.Register(Component.For<IHttpControllerActivator>().ImplementedBy<WindsorApiControllerActivator>());
sin embargo, nunca podré ejecutar WindsorApiControllerActivator.
cuando pongo depurador en WindsorControllerActivator funciona como se esperaba, pero para WindsorApiControllerActivator nunca se ejecuta.
su ayuda será apreciada
¿Cómo se registra su contenedor como el respositorio? – nemesv
¿Por qué personalizas WindsorApiControllerActivator mientras que no veo ningún tratamiento especial? –
Cuong le: porque estoy usando el objeto Session de Nhibernate en los controladores api [HttpPost] pública IList Buscar (modelo SearchViewModel) { IList searchResultViewModels = SearchVenues (modelo); return searchResultViewModels; // return "Hello World"; } –
ISession NSession pública {get; conjunto; } VendorController público (sesión sesión) { NSession = session; } // API GET/