Impossible d'ajouter des contrôleurs à Castle.Windsor dans ASP.NET MVC
-
25-09-2019 - |
Question
Compte tenu de la configuration suivante, j'ai trois ensembles.
Web (ASP.NET MVC 3.0 RC1)
Modèles
Persistance (Courant NHibernate, Castle.Windsor)
Ceci est mon 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));
}
}
}
Ceci est mon 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);
}
}
}
Ceci est mon Application_Start
dans le fichier 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));
}
Je reçois l'erreur
Aucun composant pour soutenir le Project.Web.Controllers.HomeController de service a été trouvé
au GetControllerInstance
.
Alors, je ne suis pas vraiment sûr de ce que je fais mal, et pourquoi je ne peux pas les contrôleurs enregistrés.
La solution
Votre code d'installation du château de Windsor tout appartient dans votre projet Web. Il n'y a rien à voir avec persistance.
Ceci est l'origine du problème parce que votre ControllerInstaller
tente d'enregistrer les contrôleurs de la persistance assemblage plutôt que l'ensemble de Web avec le code suivant:
System.Reflection.Assembly.GetExecutingAssembly()
.
déplacer le code IoC au projet Web et il trouvera vos contrôleurs.