2008-12-20 5 views
5

En mi búsqueda para aprender NHibernate he llegado al siguiente obstáculo; ¿Cómo debería integrarlo con StructureMap?usando (Fluido) NHibernate con StructureMap (o cualquier IoCC)

Aunque los ejemplos de código son muy bienvenidos, estoy más interesado en el procedimiento general.

Lo que estaba planeando hacer era ...

  • Uso Fluido NHibernate para crear mis asignaciones de clase para uso en configuración NHibs
  • Implementar ISession y ISessionFactory
  • Bootstrap una instancia de mi ISessionFactory en StructureMap como un conjunto unitario
  • Registro ISession con StructureMap, con per-HttpRequest almacenamiento en caché

Sin embargo, ¿no necesito llamar a varios métodos de ordenación en mi instancia de sesión al final de HttpRequest (porque es el final de su vida útil)?

Si hago el tid-up en Dispose(), ¿se ocupará structuremap de esto para mí?

Si no, ¿qué se supone que debo hacer?

Gracias

Andrew

+1

En su segundo punto menciona la implementación de ISessionFactory e ISession. No quiere implementarlos usted mismo. Es posible que desee implementar algún tipo de "administrador" que pueda darle acceso a ISessionFactory y abrir/cerrar sesiones. –

+0

¿Ya están implementados en NHib entonces? ¿En qué espacio de nombres están? –

+2

Están en el espacio de nombres NHibernate.Impl, pero puede acceder a ellos a través de Configuration.BuildSessionFactory() e ISessionFactory.OpenSession(). –

Respuesta

4

Uso StructureMap con fluent-nhibernate (y NH Validator) en 3 de mis proyectos actuales. 2 de ellos son aplicaciones ASP MVC y el tercero es un servicio web de WCF.

Su estrategia general suena correcta (excepto que no hará su propia sesión o SessionFactory, como ya se señaló en los comentarios). Para más detalles, enganchar mi código de configuración desde aquí:

http://brendanjerwin.github.com/development/dotnet/2009/03/11/using-nhibernate-validator-with-fluent-nhibernate.html

El puesto es realmente acerca de la integración de NH Validador y Fluido-NHibernate pero se puede ver exactamente cómo me registro la fábrica sesión y ISession con StructureMap en el "Bono "sección de la publicación.

RE: Poner en orden: debe intentar y siempre trabajar dentro de una transacción y confirmar o deshacer la transacción al final de su unidad de trabajo. NH solo utiliza SQL Connections cuando lo necesita y se encargará de la limpieza de ese recurso limitado para usted. La recolección de basura normal se encargará de sus sesiones.

La fábrica de sesiones es un objeto muy caro que solo deseará inicializar una vez y conservar durante toda la vida de su aplicación.

+1

El enlace de arriba está roto, debería ser http://brendanjerwin.github.com/development/dotnet/2009/03/11/using-nhibernate-validator-with-fluent-nhibernate.html –

+0

Gracias, he reparado el enlace en la respuesta. – brendanjerwin

+0

Está roto de nuevo –

0

No he utilizado esquema de la estructura, pero maybee todavía puedo ayudar a guiarlo en la dirección correcta. Fluido nHibernate es una buena elección sobre los archivos hbm.

En cuanto a la solicitud http, no necesita asegurarse de cerrar la sesión cuando finaliza la solicitud http. Si no lo haces, terminarás filtrando la sesión nHibernate. No estoy seguro de si el mapa de estructura lo manejará por usted, lo que hice fue tener un módulo http que cierra la sesión.

Sin embargo, una cosa a tener en cuenta que me pica, es que se asegurará de que envuelva todos sus datos de acceso en una transacción y se asegure de que nHibernate realmente confirma sus cambios. Si haces esto como parte de tu sesión cerrada, podrías perder la oportunidad de manejar los errores. Tengo curiosidad por escuchar lo que terminaste teniendo que hacer para obtener este workign.

Cuestiones relacionadas