ist StructureMap HttpContextScoped notwendig?

8

Ich habe einen Code wie folgt in einem Tutorial von EF code first , MVC und StructureMap gesehen, um ein Context Per Request Muster zu erstellen:

%Vor%

FirstEntity , SecondEntity und ... alle benötigen IunitOfWork in ihrem Konstruktor.

Wie Sie sehen können, verwendet es nur HttpContextScoped() für die Context nicht andere und im EndRequest -Ereignis ruft es ReleaseAndDisposeAllHttpScopedObjects() auf.

1- ist das ein richtiger Ansatz?

2- soll ich HttpContextScoped () für alle anderen Service layer Interfaces oder nicht nur für IUnitOfWork verwenden? z. B.

%Vor%

oder

%Vor%

3- ReleaseAndDisposeAllHttpScopedObjects() entledigt alle Instanzen oder disponiert nur Context ?

    
mohsen dorparasti 10.12.2012, 09:41
quelle

1 Antwort

8

Die Konvention für Webanwendungen besteht darin, dass Sie während der gesamten HTTP-Anfrage denselben ORM-Kontext / UnitOfWork beibehalten. Dies ist erforderlich, um während der Anforderung mit denselben Entitäten zu arbeiten, die Daten konsistent zu halten und die durchgeführten Datenbankaufrufe zu minimieren. Der HttpContextScoped -Lebenszyklus stellt sicher, dass die gleiche UoW-Instanz während einer Anfrage für alle Instanzen verwendet wird, die davon abhängig sind.

Also 1) ja, es ist richtig

Was den Rest der "Service-Layer-Schnittstellen" betrifft, hängt es davon ab, ob es während der gesamten Anfrage dieselbe Instanz sein muss. Fragen Sie sich selbst: "Wird der Zustand dieses Objekts während der gesamten Anfrage benötigt?" Für die meisten "Dienste" ist dies nicht der Fall. Beachten Sie auch, dass durch das Erstellen von "HttpContextScoped" alle Abhängigkeiten während dieses Bereichs beibehalten werden.

Das führt mich zu 2) In den meisten Fällen nein

ReleaseAndDisposeAllHttpScopedObjects entsorgt alle Objekte in dem mit HttpContextScoped registrierten Container. Standardmäßig werden Objekte in Transaction (neue Instanz pro Aufruf) in Struktur zugeordnet.

Also 3) Nur die IUnitOfWork Instanz wird entsorgt.

    
PHeiberg 10.12.2012, 10:15
quelle