He planteado esta pregunta anteriormente, pero aún estoy luchando por encontrar un ejemplo que pueda entender (no me digan que mire el proyecto de arquitectura S # arp sin al menos algunas indicaciones).¿Cómo puedo implementar la sesión NHibernate por solicitud sin una dependencia en NHibernate?
Hasta ahora he logrado ignorancia de persistencia en mi proyecto web. Mis clases de repositorio (en mi proyecto de datos) tienen un ISession en el constructor:
public class ProductRepository : IProductRepository
{
private ISession _session;
public ProductRepository(ISession session) {
_session = session;
}
En mi Global.asax que exponga la sesión actual y estoy creando y disponer sesión sobre BeginRequest y EndRequest (aquí es donde tengo el dependencia de NHibernate):
public static ISessionFactory SessionFactory = CreateSessionFactory();
private static ISessionFactory CreateSessionFactory() {
return new Configuration()
.Configure()
.BuildSessionFactory();
}
protected MvcApplication() {
BeginRequest += delegate {
CurrentSessionContext.Bind(SessionFactory.OpenSession());
};
EndRequest += delegate {
CurrentSessionContext.Unbind(SessionFactory).Dispose();
};
}
y finalmente mi registro StructureMap:
public AppRegistry() {
For<ISession>().TheDefault
.Is.ConstructedBy(x => MvcApplication.SessionFactory.GetCurrentSession());
For<IProductRepository>().Use<ProductRepository>();
}
parecería que necesito mis propias implementaciones genéricas de ISession y ¿ISessionFactory que puedo usar en mi proyecto web e inyectar en mis repositorios?
Solo para aclarar: estoy usando NHibernate en mi capa de repositorio y quiero usar una solicitud de sesión por (http). Por lo tanto, estoy inyectando una ISession en mis constructores de repositorio (usando structuremap). Actualmente, para crear y eliminar las sesiones en cada solicitud, he tenido que hacer referencia a NHibernate desde mi proyecto web. Esta es la dependencia que me gustaría eliminar.
Gracias, Ben
NHibernate es, según yo, no una mala dependencia. –
Mi proyecto web habla con el repositorio y NHibernate es una dependencia del repositorio. Si no fuera por el hecho de que quería una sesión por solicitud, entonces podría simplemente abrir mis sesiones dentro de la capa de repositorio. Sin embargo, sí quiero una sesión por solicitud, pero no quiero que mi proyecto web esté vinculado a NHibernate. –
Will Marcouiller: Sigue siendo una dependencia. Una dependencia es una dependencia. ¿Qué pasaría si Ben quisiera transferir su aplicación a CouchDB o MongoDB o usar una base de datos de objetos en memoria? –