Impossibile aggiungere controllori a Castle.Windsor in ASP.NET MVC
-
25-09-2019 - |
Domanda
Data la seguente configurazione, ho tre gruppi.
Web (ASP.NET MVC 3.0 RC1)
Modelli
Persistenza (perfetto NHibernate, Castle.Windsor)
Questa è la mia 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));
}
}
}
Questa è la mia 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);
}
}
}
Questa è la mia Application_Start
nel file 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));
}
sto ottenendo l'errore
è stata trovata Nessun componente per supportare il servizio Project.Web.Controllers.HomeController
al GetControllerInstance
.
Quindi, io non sono davvero sicuro di quello che sto facendo male, e perché non posso ottenere i controllori registrati.
Soluzione
Il codice di impostazione Castello di Windsor appartiene tutto nel progetto Web. E 'nulla a che fare con la persistenza.
Questa è la causa del problema, perché il vostro ControllerInstaller
sta cercando di registrare i controllori nella persistenza di montaggio piuttosto che il Web assemblea con il seguente codice:
System.Reflection.Assembly.GetExecutingAssembly()
.
Quindi, spostare il codice IoC al progetto Web e troverà i controller.