2010-09-17 7 views
0

voulu poser une petite question concernant la mise en œuvre et le château windsor IoC pour les contrôleurs dans les zones. Castle 2.5 prend-il en charge les zones MVC 2.0?Château de Windsor avec MVC 2.0 et les zones

My Castle config fonctionne bien pour mon contrôleur racine dans la racine de mon site, mais tous les contrôleurs de la région ne sont pas trouvés avec

Le IControllerFactory « XXX.Castle.WindsorControllerFactory » n'a pas retourné un contrôleur pour le nom ' Enregistrement'.

J'utilise le château directement pas par MvcContrib

Code comme suit:

class WindsorControllerFactory : DefaultControllerFactory 
{ 
    WindsorContainer container; 
    // The constructor: 
    // 1. Sets up a new IoC container 
    // 2. Registers all components specified in web.config 
    // 3. Registers all controller types as components 
    public WindsorControllerFactory() 
    { 
     // Instantiate a container, taking configuration from web.config 
     container = new WindsorContainer(); 

     // Also register all the controller types as transient 
     var controllerTypes = 
      from t in Assembly.GetExecutingAssembly().GetTypes() 
      where typeof(IController).IsAssignableFrom(t) 
      select t; 
     foreach (Type t in controllerTypes) { 
      //container.AddComponentLifeStyle(t.FullName, t, LifestyleType.Transient); 
      container.Register(Component.For(t).Named(t.FullName).LifeStyle.Transient); 
     } 

     container.Install(new WindsorInstaller()); 
    } 

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
    { 
     if (controllerType != null) 
     { 
      return (IController)container.Resolve(controllerType); 
     } 

     return null;// base.GetControllerInstance(requestContext, controllerType); 
    } 
} 

Un grand merci

Richard

+0

ce que WindsorControllerFactory utilisez-vous? si c'est personnalisé, postez le code. si c'est MVCContrib, quelle version? –

+0

et comment vous enregistrez les contrôleurs? –

+0

Mise à jour sur les commentaires précédents .. Merci Mauricio –

Répondre

2

Pour ceux qui se rencontrent ce problème à l'avenir, j'ai solution qui a résolu mon problème. La question était que mes contrôleurs n'ont pas l'espace de noms correct alloué au répertoire dans lequel ils étaient ..

-à-dire que j'avais tsd.Web.Controllers pas tsd.Areas.Account.Controllers

Définition du chemin d'espace de noms cartographie la structure du répertoire a résolu mon problème et le château pourrait alors localiser le contrôleur dans la zone ...!

Cordialement

Richard

+0

Salut Richard, je suis confronté au même problème. Pourriez-vous donner plus de détails sur la façon de définir le chemin de l'espace de noms pour mapper la structure du répertoire? Merci beaucoup – daehaai

0

Vous pouvez revenir à un contrôleur, puis après que vous pouvez obtenir exception 404

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
    { 
     if (controllerType != null) 
     { 
      return (IController)container.Resolve(controllerType); 
     } 

     return (IController)container.Resolve(typeof(HomeController)); 
    }