2010-05-18 8 views
2

Quelles sont les meilleures pratiques pour injecter et gérer une session/transaction pour NHibernate en utilisant StructureMap pour une application non Web comme un service Windows?NHibernate avec StructureMap pour une application non-Web

Dans un contexte Web, nous utilisons le cycle de vie de gestion PerRequest session à l'aide du cycle de vie hybride de StructureMap mais pour un service Windows, je ne peux pas gérer IDisposable UnitOfWork ...

Merci.

+1

Comment fonctionne votre service Windows? Est-ce qu'il interroge et exécute du code dans un événement de minuteur? Créez-vous un nouveau thread pour gérer le travail? –

+0

Le service Windows héberge certains services WCF et gère certaines tâches d'arrière-plan temporisées –

Répondre

2

Ayende donne un bon résumé de la façon de traiter NHibernate dans une application de bureau here.

Avec StructureMap, je crée d'abord le ISessionFactory manuellement. Puis déclarer l'instance à utiliser sur toutes les instances ISessionFactory:

 For<ISessionFactory>().Use(sessionFactory); 

Ainsi, vous laissez les écrans eux-mêmes pour créer et se départir de leurs sessions. Il est important que toutes les sessions soient isolées les unes des autres pour éviter les problèmes de mémoire. Ceci est expliqué en détail dans l'article. Avec cette approche, et avec la bonne utilisation de l'IStatelessSession, j'ai réduit les problèmes que j'ai rencontrés dans une application WPF/StructureMap/NHibernate.

Questions connexes