Kann nicht Controllers zu Castle.Windsor in ASP.NET MVC hinzufügen
-
25-09-2019 - |
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.
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.