Pregunta

Dada la siguiente configuración, tengo tres asambleas.

  

Web (ASP.NET MVC 3.0 RC1)

     

Modelos

     

Persistencia (Fluido NHibernate, Castle.Windsor)

Esta es mi ControllerInstaller.

using System;
using System.Web.Mvc;

using Castle;
using Castle.Windsor;

using Castle.MicroKernel;
using Castle.MicroKernel.SubSystems;
using Castle.MicroKernel.Registration;
using Castle.MicroKernel.SubSystems.Configuration;

namespace Persistence.Installers
{
    public class ControllerInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(
            AllTypes
                .FromAssembly(System.Reflection.Assembly.GetExecutingAssembly())
                .BasedOn<IController>()
                .Configure(c => c.Named(
                    c.Implementation.Name.ToLowerInvariant()).LifeStyle.Transient));
        }
    }
}

Esta es mi ControllerFactory ...

    using System;
    using System.Web;
    using System.Web.Mvc;

    namespace Persistence.Containers
    {
        /// <summary>
        /// Utilize Castle.Windsor to provide Dependency Injection for the Controller Factory
        /// </summary>
        public class WindsorControllerFactory : DefaultControllerFactory
        {
            private readonly Castle.Windsor.IWindsorContainer container;

            public WindsorControllerFactory()
            {
                container = WindsorContainerFactory.Current();
            }

            protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
            {
                return (IController)container.Resolve(controllerType);
            }
        }
    }

Esta es mi Application_Start en el archivo global.asax ..

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        // Register the Windsor Container
        ControllerBuilder.Current
            .SetControllerFactory(typeof(Persistence.Containers.WindsorControllerFactory));
    }

Estoy consiguiendo el error

  

No se encontró componente para soportar el servicio Project.Web.Controllers.HomeController

en el GetControllerInstance.

Por lo tanto, no estoy realmente seguro de lo que estoy haciendo mal, y por qué no puedo conseguir los controladores registrados.

¿Fue útil?

Solución

Su código de configuración de todo el castillo de Windsor pertenece en su proyecto web. No tiene nada que ver con la persistencia.

Esto está causando el problema, ya que su ControllerInstaller está intentando registrar los controladores en la persistencia de montaje en lugar de la web de la Asamblea con el siguiente código:

System.Reflection.Assembly.GetExecutingAssembly().

Así que mover el código de la COI al proyecto Web y encontrará los controladores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top