Wie man die Abhängigkeit von ApplicationDbContext in Repository MVC6 einsperrt

asp.net-core-mvc asp.net-mvc entity-framework-core

Frage

Ich benutze Asp.Net MVC 6 beta4 mit Repository-Muster.

In der my Startup.cs habe ich sowas wie folgt:

services.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<ApplicationDbContext>(options => 
                        options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

//Dependency Injection
services.AddTransient<IProductRepository, ProductRepository>();

In meinem Controller kann ich meine Instanz von ApplicationDbContext mit erhalten:

[FromServices]
public ApplicationDbContext DbContext { get; set; }

Aber ich kann die Instanz von ApplicationDbContext nicht in meiner Repository-Implementierung mit diesem obigen Selbstsegmentcode abrufen.

Mit MVC 5 habe ich ServiceLocator in meinem Repository verwendet und den ApplicaionDbContext so übernommen:

var context = ServiceLocator.Current.GetInstance<ApplicationDbContext>()

Wie bekomme ich die Instanz von ApplicationDbContext in meinem Repository mit Asp.NET MVC 6?

Akzeptierte Antwort

Wahrscheinlich möchten Sie AddScoped und nicht AddTransient verwenden, damit der Kontext beim Beenden der Anforderung ordnungsgemäß aufgelöst wird.

Sie müssen auch den Kontext hinzufügen, nicht nur die AddEntityFramework-Aufrufe ...

services.AddScoped<IProductRepository, ProductRepository>();
services.AddScoped<ApplicationDbContext, ApplicationDbContext>();


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum