ASP.NET MVC - Compartilhando o estado da sessão entre controladores

Eu ainda não estou familiarizado com a Inversão do Controle (embora eu esteja aprendendo sobre isso agora), então se essa é a solução para a minha pergunta, deixe-me saber e eu voltarei a aprender sobre isso.

Eu tenho um par de controladores que precisam de uma variável de sessão, naturalmente nada muito especial aconteceu por causa de como a sessão funciona em primeiro lugar, mas isso me fez pensar qual é a maneira mais limpa de compartilhar objetos relacionados entre dois controladores separados. No meu cenário específico, eu tenho um UploadController e um ProductController que funcionam em conjunto uns com os outros para fazer upload de arquivos de imagem. Conforme os arquivos são carregados pelo UploadController, os dados sobre o upload são armazenados na Sessão. Depois disso, preciso acessar os dados da sessão no ProductController. Se eu criar uma propriedade get / set para a variável Session contendo minhas informações de upload em ambos os controladores, poderei acessar esses dados, mas ao mesmo tempo, violarei todos os tipos de DRY, sem mencionar a criação de um, na melhor das hipóteses, design confuso onde um objeto é compartilhado e modificado por dois objetos completamente desconectados.

O que você sugere?

Contexto Exato:

Um upload de arquivo View exibe um arquivo para UploadController.ImageWithpreview (), que então lê o arquivo postado e o copia para um diretório temporário. Depois de salvar o arquivo, outra classe produz uma miniatura da imagem enviada. O caminho para o arquivo original e a miniatura gerada é retornado com um JsonResult para um retorno de chamada de javascript que atualiza algum conteúdo dinâmico em um formulário na página que pode ser "Salvo" ou "Cancelado". Independentemente de a imagem enviada ser salva ou ser ignorada, eu preciso movê-la ou excluí-la da miniatura gerada do diretório temporário. Para facilitar isso, o UploadController rastreia todos os arquivos de upload e suas miniaturas em um objeto Fila mantida pela sessão.

Back in the View: depois que o formulário é preenchido com uma miniatura gerada da imagem que foi carregada, o formulário volta ao ProductsController onde o arquivo selecionado é identificado (atualmente eu armazeno o nome do arquivo em um campo Oculto, que eu percebo que é um vulnerabilidade horrível) e, em seguida, copiado do diretório temporário para um local permanente. Idealmente, gostaria de simplesmente acessar a fila que eu armazenei na sessão, para que o formulário não precise conter o local da imagem como agora. Foi assim que imaginei a minha solução, mas ouvirei atentamente quaisquer comentários ou críticas.

questionAnswers(2)

yourAnswerToTheQuestion