2010-05-06 9 views
4

Je rencontre un problème lors de l'utilisation de ma nouvelle fabrique de contrôleurs Castle Windsor avec la nouvelle méthode RenderAction. Je reçois le message d'erreur suivant:Castle Windsor Controller Factory et RenderAction

Une instance unique du contrôleur 'MyController' ne peut pas être utilisée pour gérer plusieurs demandes. Si une fabrique de contrôleurs personnalisée est utilisée, assurez-vous qu'elle crée une nouvelle instance du contrôleur pour chaque requête.

Voici le code dans mon usine de contrôleur:

public class CastleWindsorControllerFactory : DefaultControllerFactory 
    { 
     private IWindsorContainer container; 

     public CastleWindsorControllerFactory(IWindsorContainer container) 
     { 
      this.container = container; 
     } 

     public override IController CreateController(RequestContext requestContext, string controllerName) 
     { 
      return container.Resolve(controllerName) as IController; 
     } 

     public override void ReleaseController(IController controller) 
     { 
      this.container.Release(controller); 
     } 
    } 

Est-ce que quelqu'un sait ce que les changements que je dois faire pour le faire fonctionner avec RenderAction?

Je trouve également le message d'erreur légèrement étrange car il parle de plusieurs requêtes, mais d'après ce que je peux dire, RenderAction ne crée pas réellement une autre requête (BeginRequest n'est pas renvoyé).

Répondre

10

Je crois que la configuration par défaut pour Castle Windsor est un Singleton. Vous devez changer cela en Transient dans votre Web.Config ou en mettant cet attribut sur votre classe [Transient].

+0

Vous avez raison. Le style de vie par défaut pour les composants Windsor est singleton. – PatrickSteele

+2

Vous pouvez également l'enregistrer comme transitoire via API http://stw.castleproject.org/Windsor.Registering-components-one-by-one.ashx?HL=transient#Configuring_components_lifestyle_3. L'utilisation de XML pour l'enregistrement n'est pas considérée comme une bonne pratique. –

Questions connexes