2015-07-09 6 views
5

Inject Ich benutze Asp.Net MVC 6 beta4 mit Repository-Muster.Wie die Abhängigkeit von ApplicationDbContext in Repository MVC6

In den mein Startup.cs Ich habe sowas wie folgt aus:

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

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

Im mein Controller kann ich meine Instanz ApplicationDbContext mit bekommen:

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

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

Mit 5 MVC habe ich in meinem Repository Servicelocator und nahm den ApplicaionDbContext so:

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

die Instanz ApplicationDbContext in meinem Repository mit Asp.NET MVC 6 zu bekommen?

+2

Haben Sie diese Option aktiviert? http://stackoverflow.com/questions/29332494/asp-net-vnext-dbcontext-dependency-injection-multiple-request-issues – Fals

+0

Ich werde ankommen! Danken! –

+1

Warum verwenden Sie die Eigenschafteninjektion anstelle der Konstruktorinjektion? –

Antwort

4

Was Sie wahrscheinlich wollen, ist AddScoped, und nicht AddTransient, so dass der Kontext ordnungsgemäß beendet wird, wenn die Anfrage endet.

Sie müssen auch tatsächlich auf den Kontext hinzufügen, nicht nur die AddEntityFramework ruft ...

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

Also, in meinem Repository wäre die Injektion von Konstrukteur gemacht? –

+0

@RenattoMachado - Ich verstehe nicht, was Sie meinen .. wenn Sie fragen, ob Sie Konstruktor Injektion verwenden sollten, dann ja, sollten Sie .. es sei denn, es gibt keinen anderen Weg, dann wäre Eigentum Injektion, was Sie verwenden würden .. aber nur Immobilieninjektion als letztes Mittel verwenden. –

+0

Ich habe getan, was Sie gesagt haben, aber ich habe diesen Fehler: 'Keine Datenspeicher sind konfiguriert. Konfigurieren Sie einen Datenspeicher durch Überschreiben von OnConfiguring in Ihrer DbContext-Klasse oder in der AddDbContext-Methode beim Einrichten von Diensten. –

Verwandte Themen