2009-12-10 3 views
2

J'ai le code suivant dans ma méthode de démarrage de l'application avec le code pour configurer le conteneur et le support d'usine. La méthode d'usine semble être appelée seulement une fois au lieu de chaque fois que la session est nécessaire.Castle - Utilisation de la méthode d'usine et du mode de vie transitoire

_container.Kernel.Register(
    Component.For<ISession>().LifeStyle.Transient 
    .UsingFactoryMethod(() => 
    { 
     //Any line of code will only be hit once the first time ISession is requested. 
    })); 

j'utilisais d'abord construire 1509 du tronc, mais mis à jour pour construire 1548 avec le même résultat . S'il vous plaît laissez-moi savoir si vous avez besoin de plus d'informations pour aider moi.

Note: Il s'agit d'une liste de diffusion postée sur la liste de discussion du château en attente d'approbation.

Remarque 2: Ce code fonctionne avec la dernière version de Windsor. Cependant, nous travaillons sur la construction du tronc car nous avions besoin de la fonctionnalité de changeset 5927 (créée par mausch le 13 août 2009).

Voir:

  1. Register Multiple Components for Single Interface Using Castle Windsor
  2. http://fisheye2.atlassian.com/changelog/castleproject/?cs=5927

Répondre

2

pourquoi diable êtes-vous pas en utilisant la vie PerWebRequest pour ce composant, ou mieux encore facilité d'intégration NHibernate de Windsor?

Maintenant revenons au vrai problème.

Votre code ne fonctionne pas car il contient un bogue. Vous ne stockez pas la référence dans un HttpContext actuel. Vous stockez une référence dans un HttpContext qui est en cours au premier appel au délégué que vous avez passé. Le délégué anonyme (ou la classe anonyme qui l'englobe) stocke la référence à cette première instance de HttpContext, donc votre condition if ne sera fausse que la toute première fois que la requête arrivera.

+0

Je ne peux pas utiliser PerWebRequest car il bombarde lorsque je l'utilise au démarrage de l'application. J'ai modifié la question afin que lorsque je passe le code dans le débogueur, la première ligne de code dans la méthode d'usine est seulement atteinte la première fois que ISession est demandée et plus jamais. Il semble que le mode de vie transitoire ne fonctionne pas. – beckelmw

+0

si vous suggérez que .UsingFactoryMethod en conjonction avec Lifestyle.Transient ne fonctionne pas, que vous avez tort. Je l'ai juste testé sur le coffre. –

+0

encore, pourquoi n'utilisez-vous pas la facilité d'intégration de NHibernate? Je suis sûr qu'il peut gérer des scénarios comme le démarrage de votre application. –

Questions connexes