Todavía no estoy familiarizado con Inversion of Control (aunque estoy aprendiendo sobre esto ahora) así que si esa es la solución a mi pregunta, házmelo saber y obtendré volver a aprender sobre eso.ASP.NET MVC - Compartir estado de sesión entre controladores
Tengo un par de controladores que necesitan una variable de sesión, naturalmente, no ha pasado nada especial debido a cómo funciona la sesión en primer lugar, pero esto me hizo pensar cuál es la forma más limpia de compartir objetos relacionados entre dos controladores separados es. En mi caso específico, tengo un Controlador de carga y un Controlador de producto que funcionan en conjunto para cargar archivos de imagen. A medida que UploadController sube los archivos, los datos sobre la carga se almacenan en la sesión. Después de que esto suceda, necesito acceder a los datos de la sesión en el ProductController. Si creo una propiedad get/set para la variable Session que contiene mi información de carga en ambos controladores, podré acceder a esa información, pero al mismo tiempo estaré violando todo tipo de DRY, sin mencionar la creación de un, en el mejor de los casos, un diseño confuso donde un objeto es compartido y modificado por dos objetos completamente desconectados.
¿Qué es lo que sugiere?
Contexto exacta:
un archivo subido Ver mensajes un archivo a UploadController.ImageWithpreview(), que luego lee en el archivo publicado y lo copia en un directorio temporal. Después de guardar el archivo, otra clase produce una miniatura de la imagen cargada. La ruta al archivo original y a la miniatura generada se devuelve con un JsonResult a una devolución de llamada javascript que actualiza parte del contenido dinámico en un formulario en la página que puede ser "Guardado" o "Cancelado". Ya sea que la imagen cargada se guarde o se omita, necesito moverla o eliminarla y la miniatura generada del directorio temporal. Para facilitar esto, UploadController realiza un seguimiento de todos los archivos de carga y sus miniaturas en un objeto Queue mantenido por la sesión.
Volver a la vista: después de completar el formulario con una miniatura generada de la imagen que se cargó, el formulario se publica en ProductsController donde se identifica el archivo seleccionado (actualmente guardo el nombre de archivo en un campo Oculto, Me doy cuenta es una vulnerabilidad horrible), y luego copiado fuera del directorio temporal a una ubicación permanente. Idealmente, me gustaría simplemente acceder a la cola que he almacenado en la sesión para que el formulario no tenga que contener la ubicación de la imagen como lo hace ahora. Así es como visualicé mi solución, pero escucharé con entusiasmo cualquier comentario o crítica.
Gracias esta entrada. He agregado más información a mi pregunta original si eso es de más utilidad. –
El procesamiento de la imagen es en tiempo real, pero existe dentro de un área de administración en el sitio web, por lo que el uso general es bastante mínimo. Como máximo, solo es probable que se procesen unas pocas imágenes por hora en toda la aplicación. Otro enfoque que también consideré fue simplemente hacer que el evento Session_End de la aplicación elimine todo el directorio temporal para la sesión actual, pero no estoy seguro de lo ideal que es. –
Si su usuario ha subido una gran cantidad de imágenes que están procesando, no creo que pueda garantizar que se haga cuando su sesión caduque. Lo eliminaría una vez que se haya completado el "procesamiento". La (s) cadena (s) de trabajo (s) debe (n) mantenerse activa (s) siempre que la cola tenga elementos para procesar, por lo que es seguro asumir eso. Siempre que su grupo de aplicaciones no esté "dormido", su sistema debería continuar procesando bien. Estoy bastante seguro de que está cubierto en el artículo que he vinculado. – andymeadows