ASP Web Api - IoC - Resolver HttpRequestMessage

Estoy intentando configurar Castle Windsor con ASP.NET WebAPI.

También estoy usando el paquete Hyprlinkr (https://github.com/ploeh/Hyprlinkr) y por lo tanto necesito una instancia de HttpRequestMessage inyectado en una de las dependencias de mi controlador.

Estoy siguiendo este artículo por Mark Seemann -http://blog.ploeh.dk/2012/04/19/WiringHttpControllerContextWithCastleWindsor.aspx , pero estoy encontrando que aunque la API se ejecuta, cuando hago una llamada a ella, la solicitud simplemente se bloquea. No hay mensaje de error. Es como si estuviera en un bucle infinito. Se cuelga en la llamada para resolver en mi controlador personalizado activador

Estoy pensando que tengo algunos de mis registros de Castle mal. Si elimino los que se mencionan en el artículo anterior, puedo hacer una llamada a la API (aunque sin las dependencias que necesito resolver)

¿Algunas ideas?

El código está debajo

//Global.asax
public class WebApiApplication : HttpApplication
{
    private readonly IWindsorContainer container;

    public WebApiApplication()
    {
        container = 
            new WindsorContainer(
                new DefaultKernel(
                    new InlineDependenciesPropagatingDependencyResolver(), 
                    new DefaultProxyFactory()), 
                new DefaultComponentInstaller());

        container.Install(new DependencyInstaller());
    }

    protected void Application_Start()
    {        
        GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), new WindsorCompositionRoot(this.container));
    }

// installer
public class DependencyInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.AddFacility<TypedFactoryFacility>();

        container.Register(
            Component.For<ValuesController>()
                .Named("ValuesController")
                .LifeStyle.PerWebRequest,

            Component.For<IResourceLinker>()
                .ImplementedBy<RouteLinker>()
                .LifeStyle.PerWebRequest,

            Component.For<IResourceModelBuilder>()
                .ImplementedBy<ResourceModelBuilder>()
                .LifeStyle.PerWebRequest,

                Component.For<HttpRequestMessage>()
                .Named("HttpRequestMessage")
                .LifeStyle.PerWebRequest
            );
    }
}

//Activator

public class WindsorCompositionRoot : IHttpControllerActivator
{
    private readonly IWindsorContainer container;

    public WindsorCompositionRoot(IWindsorContainer container)
    {
        this.container = container;
    }

    public IHttpController Create(
        HttpRequestMessage request,
        HttpControllerDescriptor controllerDescriptor,
        Type controllerType)
    {
        var controller = (IHttpController)this.container.Resolve(controllerType, new { request = request });

        request.RegisterForDispose(
            new Release(
                () => this.container.Release(controller)));

        return controller;
    }

// DependencyResolver   
public class InlineDependenciesPropagatingDependencyResolver : DefaultDependencyResolver
{
    protected override CreationContext RebuildContextForParameter(CreationContext current, Type parameterType)
    {
        if (parameterType.ContainsGenericParameters)
        {
            return current;
        }

        return new CreationContext(parameterType, current, true);
    }
}

EDITAR *********** INFORMACIÓN ADICIONAL ****************

Así que configuré un escenario en el que el controlador solo toma un HttpRequestMessage como un argumento ctor y encuentra:

Esto funciona:

//controller
public class ValuesController : ApiController
    {
        private readonly HttpRequestMessage _httpReq;

        public ValuesController(HttpRequestMessage httpReq)
        {
            _httpReq = httpReq;
        }
//IHttpControllerActivator
public IHttpController Create(
            HttpRequestMessage httpRequest,
            HttpControllerDescriptor controllerDescriptor,
            Type controllerType)
        {

            var controller = (IHttpController)this.container.Resolve(
                controllerType, new { httpReq = httpRequest });

            return controller;

Sin embargo, esto no lo hace.

//controller
public class ValuesController : ApiController
    {
        private readonly HttpRequestMessage _httpReq;

        public ValuesController(HttpRequestMessage request)
        {
            _httpReq = request;
        }

//IHttpControllerActivator
public IHttpController Create(
            HttpRequestMessage request,
            HttpControllerDescriptor controllerDescriptor,
            Type controllerType)
        {

            var controller = (IHttpController)this.container.Resolve(
                controllerType, new { request = request });

            return controller;

es decir, cuando el objeto anon tiene una propiedad llamada "solicitud" y el controlador ctor arg se llama "solicitud". De alguna manera, el controlador piensa que su propiedad de solicitud es nula. Que es lo que causa el error que veo:

No se puede reutilizar una instancia de 'ApiController'. 'ApiController' tiene que ser construido por mensaje entrante. Verifique su 'IHttpControllerActivator' personalizado y asegúrese de que no fabricará la misma instancia.

en System.Web.Http.ApiController.ExecuteAsync (HttpControllerContext controllerContext, CancelaciónToken cancelaciónToken) en el sistema. solicitud, CancelaciónTenimiento canceladoToken)

Dale una leida a esto¿Cómo puedo enriquecer la composición de objetos en StructureMap sin invocar la inyección de setter?

Explica un escenario similar.

Por supuesto, hyprlinkr tiene su ctor arg para HttpRequestMessage llamado "solicitud", así que necesito especificar el objeto anon con ese nombre de propiedad.

¿Algunas ideas?

Respuestas a la pregunta(2)

Su respuesta a la pregunta