¿Cómo puedo resolver esta consulta NHibernate en una arquitectura de n niveles?

He golpeado una pared al tratar de desacoplar NHibernate de mi capa de servicios. Mi arquitectura se ve así:

web -> servicios -> repositorios -> nhibernate -> db

Quiero poder generar consultas nhibernadas desde mi capa de servicios y posiblemente a mi capa web sin que esas capas sepan con qué orm están tratando. Actualmente, tengo un método de búsqueda en todos mis repositorios que toma enIList<object[]> criteria. Esto me permite pasar en una lista de criterios comonew object() {"Username", usernameVariable}; Desde cualquier lugar de mi arquitectura. NHibernate toma esto y crea un nuevo objeto de Criterios y agrega los criterios pasados. Esto funciona bien para las búsquedas básicas de mi capa de servicio, pero me gustaría tener la capacidad de pasar un objeto de consulta que mi repositorio traduce a un criterio de NHibernate.

Realmente, me encantaría implementar algo como lo que se describe en esta pregunta:¿Hay algún valor en abstraer el criterio de inhibición?. Simplemente no estoy encontrando ningún buen recurso sobre cómo implementar algo como esto. ¿Es el método descrito en esa pregunta un buen enfoque? Si es así, ¿podría alguien proporcionar algunos consejos sobre cómo implementar una solución de este tipo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta