[O] Cómo definir un ciclo de vida StructureMap para UoW a ser consumido por las peticiones HTTP y puestos de trabajo de cuarzoStructureMap devuelve un objeto de sesión nHibenrate dispuesta a partir de hilos ámbito local
tengo esta aplicación web que utiliza SM para IoC. Estoy usando el alcance HybridHttpOrThreadLocalScoped para almacenar mis objetos ness nHibernate. Esto funciona bien en una sesión por moda de solicitud para mis solicitudes web.
Pero también tengo quartz.net que programa un par de trabajos. El trabajo usa la misma unidad de trabajo para obtener el objeto ISession. En este escenario, cuando el planificador inicia el trabajo, todo funciona bien al principio y el trabajo funciona bien por un par de veces HASTA que se repita la identificación del hilo de trabajo.
Imagine que, cuando se programa el trabajo, comience a ejecutarse en hilos con identificadores 11, 12, 13 y luego con el id. De hilo 11 nuevamente. En este punto, structuremap devuelve un objeto de sesión que ya está dispuesto y obtengo "System.ObjectDisposedException: Session is closed!" error.
Por lo que puedo ver, la sesión se guarda en el almacenamiento local de subprocesos y después de que dispongo la sesión al final de mi unidad de trabajo, el objeto de sesión se mantiene en el almacenamiento local de subprocesos. Parece que después de que el hilo termina su almacenamiento local no se borra y de alguna manera cuando se crea un nuevo subproceso con el mismo ID, structuremap busca la sesión en el almacenamiento local de subprocesos antiguo (que se supone borrado para el nuevo subproceso) Creo) y devuelve el objeto de sesión que ya está dispuesto.
Preguntas:
- ¿Hay una manera de borrar el almacenamiento local de hilo (en extinción)?
- ¿Hay un equivalente de "ReleaseAndDisposeAllHttpScopedObjects" para objetos con ámbito de subprocesos?
- ¿Hay alguna forma de anular (o expulsar) el objeto eliminado, por lo que incluso si SM lo busca, no lo encontrará y tendrá que crear una nueva instancia?
Espero haber aclarado mi pregunta. Esto ha tomado un par de horas de mi tiempo y todavía no he encontrado una manera de evitarlo. Agradezco cualquier sugerencia:>
Actualización: he añadido mi propia solución para hacer una UoW servida por el trabajo StructureMap con ambas peticiones http y puestos de trabajo de cuarzo. Avíseme si tiene una solución mejor/más fácil/más simple.
¿Está gestionando sus IJobs de cuarzo con StructureMap? –
@Mauricio: Estoy usando StructureMap en mi aplicación. Sin embargo, no estoy seguro de lo que quiere decir con la gestión de trabajos de cuarzo por StructeMap:> – kaptan
¿sus instancias de Quartz IJob son administradas por StructureMap? En otras palabras: ¿registra sus trabajos en el contenedor? –