Découvrez l'architecture S # arp. C'est un framework qui enveloppe NHibernate et fournit ceci pour vous, ainsi que d'autres fonctionnalités. Vous pouvez également le faire avec un conteneur d'injection de dépendances comme Castle Windsor ou Ninject. (S # arp utilise Castle Windsor).
Si vous voulez faire cela par vous-même, vous devez créer un HttpModule
pour ouvrir et fermer la session au début et à la fin de chaque requête Web. Au début d'une requête, le module ouvrait une session et la stockait dans le HttpContext.Items
, qui est un stockage par requête Web. Vos dépôts obtiendraient la session d'ici tout en traitant la demande. (Pour une conception propre, créez une interface ISessionManager
utilisée par les référentiels et une implémentation qui accède au stockage par requête, puis testable à l'unité.) Enfin, le module videra et fermera la session à la fin d'une requête. Je l'ai fait une fois sur un projet NHibernate, et même si c'était éducatif, c'était beaucoup de travail. S # arp est une grande structure qui dicte une grande partie de la structure de l'application. Si vous ne voulez pas aller aussi loin, jetez un coup d'œil à Castle Windsor pour vous en faire abstraction. Tout ce que vous devez faire (plus ou moins) est de configurer le conteneur pour instancier les dépôts avec un objet de session NHibernate par requête en tant que paramètre constructeur. Si vous voulez vraiment apprendre comment, créez votre propre HttpModule, mais je recommande d'utiliser un framework en production.
Mais il est session per- demande (http) ... pourquoi voudriez-vous cacher à partir du Web projet? – dotjoe