Ich refaktorieren ein Projekt, das mehrere DbCOntexts pro Methodenaufruf in den Datenrepositorys erstellt. Also ich möchte eine Instanz des DbContext pro HTTP-Anfrage haben.Wie verwende ich eine einzelne Instanz von DbContext, pro Anfrage mit Unity
Ich habe versucht zu tun:
container.RegisterType<ApplicationDbContext>(new PerRequestLifetimeManager());
und für jedes Repository:
...
container.RegisterType<IBusinessRepository, BusinessRepository>(new InjectionConstructor(new ApplicationDbContext()));
container.RegisterType<ICountryRepository, CountryRepository>();
...
Aber das wird eine neue Instanz des DbContext() pro Repository, natürlich erstellen.
Ich versuchte
container.RegisterType<IBranchCategoryRepository, BranchCategoryRepository>(
new InjectionConstructor(container.Resolve<ApplicationDbContext>()));
Aber das gibt mir:
Die PerRequestLifetimeManager nur im Rahmen einer HTTP-Anforderung verwendet werden können. Mögliche Ursachen für diesen Fehler sind die Verwendung des Lebensdauer- -Managers in einer Nicht-ASP.NET-Anwendung oder die Verwendung in einem Thread, der nicht mit dem entsprechenden Synchronisationskontext verknüpft ist.
Also wie kann ich die gleiche Instanz in jedes Repository injizieren?
Danke, ich nahm das an, aber ich habe eine unbehandelte Ausnahme. Nach dem aktivierten API-Tracing wurde mir klar, was vor sich ging. Es gab andere Klassen mit Abhängigkeiten, die unterbrochen waren. Ich werde deine Antwort akzeptieren, es hat mich aus einer anderen Perspektive betrachtet. –