Ich arbeite die neueste ASP.Net Core RC2, Web-API, nur für Windows. Rahmen 4.6.1.Dependency Injection und Scope?
Ich bin verwirrt über die Rolle des Standard-Repository-Muster gegenüber der Art, wie Core Controller-Abhängigkeits-Injektion behandelt. Ich möchte nur sicherstellen, dass dies der richtige Ansatz ist, da es nicht viel Dokumentation gibt (oder es wird widersprechen).
Die Art, wie ich dies jetzt eingerichtet habe, habe ich eine Standard-Repository-Schnittstelle für CRUD-Operationen und die zugehörige Klasse, die diese Operationen implementiert.
Ich injiziere das Repository in den Controller. Die beiden Schritte, die ich getroffen habe, sind (in Startup.cs
, ConfigureServices()
):
services.AddSingleton<IMyCustomRepository, MyCustomRepository>();
Mein Controller wird dann im Repository unter:
public MyCustomController(IMyCustomRepository repository) { }
Mein Endziel ist hier EF Kern zu erhalten, einschließlich der InMemoryProvider.
Ist das bis jetzt korrekt gebaut? Eine meiner Hauptsorgen ist, dass ich ständig darüber lese, wie Repository-Muster bei der Verwendung von ORMs wie Entity Framework nicht notwendig sind, bin aber nicht sicher, wie dies für EF Core gilt.
Ich habe gelesen, dass Sie die AddSingleton hier nicht verwenden sollten, wenn Sie EF Core verwenden, weil das von einem DbContext abhängt, der Scoped ist (also sollten Sie das stattdessen verwenden)?
Vielen Dank. Wo "lebt" der "MyDbContext" mit dem Repository-Muster? Ich habe überall auf der Karte Beispiele gesehen. Ich möchte speziell über Core RC2 wissen. Soll dies in das Repository eingefügt und als Mitglied gespeichert werden? Ich habe es auch in 'using()' Blöcken on-demand verpackt gesehen. – Patrick
@Patrick: Sie sollten 'using'-Blöcke nicht in einer Webanwendung mit Abhängigkeitsinjektion/IoC-Container verwenden, da der Container nach dem Verlassen des' using'-Blocks entsorgt wird und alle weiteren Zugriffe während derselben Anfrage fehlschlagen mit einer Ausnahme. ASP.NET Core wird sich um die Entsorgung kümmern, sobald die Anfrage abgeschlossen ist (vorausgesetzt, Sie haben es mit Gültigkeitsdauer registriert) – Tseng
@Tseng Einverstanden. Soll der DbContext in diesem Setup über den Konstruktor in das Repository eingefügt und als Member gespeichert werden? – Patrick