J'utilise Castle Windsor 3.0 et cela a fonctionné parfaitement pour moi jusqu'à ce que j'essaie d'enregistrer les contrôleurs (j'ai utilisé WCF facility et IoC pour la couche de dépôt/service). Voici mes contrôleurs classe d'installation:Contrôleurs Castle windsor 3.0 et ASP.NET MVC
public class ControllersInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
RegisterAllBasedOnWithCustomComponentRegistration(container, typeof(IController),
typeof(HomeController).Assembly,
cr => cr.LifeStyle.Transient);
}
private void RegisterAllBasedOnWithCustomComponentRegistration(IWindsorContainer container, Type baseType,
Assembly assemblyWithImplementations, Func<ComponentRegistration, ComponentRegistration<object>> customComponentRegistrationCb)
{
container.Register(
AllTypes.FromAssembly(assemblyWithImplementations)
.BasedOn(baseType)
.If(t => t.Name.EndsWith("Controller"))
.Configure(c => customComponentRegistrationCb(c)));
}
}
Et voici mon usine de contrôleur:
public class WindsorControllerFactory : DefaultControllerFactory
{
private readonly IKernel _kernel;
public WindsorControllerFactory(IKernel kernel)
{
_kernel = kernel;
}
public override void ReleaseController(IController controller)
{
_kernel.ReleaseComponent(controller);
}
public override IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
var controllerComponentName = controllerName + "Controller";
return _kernel.Resolve<IController>(controllerComponentName);
}
}
De mon global.asax j'appelle la méthode suivante:
InversionOfControl.InstallControllers (FromAssembly .Ce());
qui se trouve dans un autre projet. Et là, je fais appeler le code d'installation:
public static void InstallControllers(IWindsorInstaller install)
{
_container.Install(install);
}
il semble que je suis en train de faire quelque chose de mal et j'espère que je suis parce que ce pourrait être un moment « ne jamais utiliser de nouveau bêta Awny » pour moi.
Je reçois la prochaine exception: n'a été trouvé aucun élément pour soutenir le System.Web.Mvc.IController service barbante Je peux voir le contrôleur en mode de débogage étant enregistré dans le conteneur
Il est là, dans le message d'exception. Il semble que vous essayez de résoudre votre contrôleur en tant que 'IController' plutôt que sa classe d'implémentation –
Eh bien, je lui demande de résoudre exactement HomeController dans controllerName, pas IController. Peut-être que je me trompe, n'est-ce pas? –