ASP.NET MVC - Freigeben des Sitzungsstatus zwischen Controllern

Ich bin immer noch größtenteils nicht mit Inversion of Control vertraut (obwohl ich gerade etwas darüber lerne). Wenn dies die Lösung für meine Frage ist, lass es mich einfach wissen und ich werde mich wieder damit befassen.

Ich habe zwei Controller, die eine Session-Variable benötigen. Natürlich ist nichts Besonderes passiert, da Session an erster Stelle funktioniert. Ich habe mich jedoch gefragt, wie sich verwandte Objekte am saubersten zwischen zwei separaten Controllern austauschen lassen. In meinem speziellen Szenario habe ich einen UploadController und einen ProductController, die zusammenarbeiten, um Bilddateien hochzuladen. Während Dateien vom UploadController hochgeladen werden, werden Daten zum Upload in der Sitzung gespeichert. In diesem Fall muss ich im ProductController auf die Sitzungsdaten zugreifen. Wenn ich eine get / set-Eigenschaft für die Session-Variable erstelle, die meine Upload-Informationen in beiden Controllern enthält, kann ich auf diese Daten zugreifen, aber gleichzeitig verstoße ich gegen alle Arten von DRY, ganz zu schweigen von der Erstellung eines. bestenfalls verwirrendes Design, bei dem ein Objekt von zwei vollständig getrennten Objekten gemeinsam genutzt und geändert wird.

Was schlagen Sie vor?

Exakter Kontext:

Eine Datei-Upload-Ansicht sendet eine Datei an UploadController.ImageWithpreview (), die die gesendete Datei dann einliest und in ein temporäres Verzeichnis kopiert. Nach dem Speichern der Datei erstellt eine andere Klasse eine Miniaturansicht des hochgeladenen Bildes. Der Pfad sowohl zur Originaldatei als auch zur generierten Miniaturansicht wird dann mit einem JsonResult-Befehl an einen JavaScript-Rückruf zurückgegeben, der einige dynamische Inhalte in einer Form auf der Seite aktualisiert, die "gespeichert" oder "abgebrochen" werden kann. Unabhängig davon, ob das hochgeladene Bild gespeichert oder übersprungen wird, muss ich es und die generierte Miniaturansicht aus dem temporären Verzeichnis verschieben oder löschen. Um dies zu vereinfachen, verfolgt UploadController alle Upload-Dateien und deren Miniaturansichten in einem Warteschlangenobjekt mit Sitzungsverwaltung.

Zurück in der Ansicht: Nachdem das Formular mit einer generierten Miniaturansicht des hochgeladenen Bilds ausgefüllt wurde, wird das Formular an den ProductsController zurückgesendet, in dem die ausgewählte Datei identifiziert wird (derzeit speichere ich den Dateinamen in einem ausgeblendeten Feld, das meines Erachtens ein schreckliche Sicherheitsanfälligkeit) und dann aus dem temporären Verzeichnis an einen permanenten Speicherort kopiert. Im Idealfall möchte ich einfach auf die Warteschlange zugreifen, die ich in der Sitzung gespeichert habe, damit das Formular den Bildspeicherort nicht wie jetzt enthalten muss. So habe ich mir meine Lösung vorgestellt, aber ich werde auf Kommentare und Kritik gespannt sein.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage