Frage

In Anbetracht der folgenden Setup, ich habe drei Baugruppen.

  

Web (ASP.NET MVC 3.0 RC1)

     

Modelle

     

Persistence (Fluent NHibernate, Castle.Windsor)

Das ist mein 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));
        }
    }
}

Das ist mein ... Controller

    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);
            }
        }
    }

Das ist mein Application_Start in der global.asax Datei ..

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

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

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

Ich erhalte den Fehler

  

Keine Komponente für die Unterstützung des Service Project.Web.Controllers.HomeController gefunden wurde

am GetControllerInstance.

Also, ich bin nicht wirklich sicher, was ich tue, falsch, und warum kann ich nicht den Controller erhalten registriert.

War es hilfreich?

Lösung

Ihr Schloss Windsor Setup-Code gehört alles in Ihrem Web-Projekt. Es ist nichts mit Ausdauer zu tun.

Dies verursacht das Problem, weil Ihre ControllerInstaller versucht, die Controller in den Persistence Montage anstatt die Web Baugruppe mit dem folgenden Code zu registrieren:

System.Reflection.Assembly.GetExecutingAssembly().

So bewegen Sie den IoC-Code zu dem Webprojekt, und es wird Ihre Controller finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top