2008-12-11 3 views
3

J'ai le code suivant dans un module Autofac qui est utilisé dans ma méthode de Application_Start:Comment puis-je m'assurer qu'il y a une ISession de NHibernate par requête utilisant Autofac?

builder.Register(c => new Configuration().Configure().BuildSessionFactory()) 
    .SingletonScoped(); 
builder.Register(c => c.Resolve<ISessionFactory>().OpenSession()) 
    .HttpRequestScoped(); 

builder.Register<NHibernateSomethingRepository>().As<ISomethingRepository>(); 

Le constructeur pour le dépôt prend un ISession comme argument. Mais je me retrouve avec une session pour l'ensemble de l'application, même si j'ai explicitement demandé qu'il soit HttpRequestScoped.

J'ai configuré le module HTTP ContainerDisposal.

Selon le documentation, vous devez créer un conteneur imbriqué, mais je laisse Autofac autowire les dépendances.

Que dois-je faire?

Merci!

Répondre

8

J'ai trouvé le problème, alors je vais répondre à ma propre question.

J'ai enregistré mon référentiel avec la portée par défaut, qui dans Autofac est la portée singleton. J'aurais dû faire ceci:

builder.Register<NHibernateSomethingRepository>() 
    .As<ISomethingRepository>() 
    .HttpRequestScoped; 
+1

NOTE: Dans Autofac2, la valeur par défaut a changé: elle est maintenant: 'factoryScoped' AKA 'InstancePerDependancy' dans le nouveau langage. – UpTheCreek

Questions connexes