So entwerfen Sie ein Repository-Muster mit Dependency Injection in ASP.NET Core MVC?

8

Als ASP.NET Core 1.0 MVC ziemlich neu, habe ich mich entschieden, ein Repository-Muster für eine MVC Core-App zu verwenden; Ich verwende eine SQL DB für die Datenschicht SampleDbContext , und ich möchte eine Repository-Klasse für einige meiner Geschäftseinheiten haben. Bisher habe ich in den Dateien startup.cs , CustomerController.cs und CustomerRepository.cs Folgendes getan: Eine Beispiel-Entität ist "Kunde".

In der Methode ConfigureServices der Startup-Klasse:

%Vor%

In einem Controller:

%Vor%

In einem Repository:

%Vor%

Bei diesem Design stecke ich den SampleDbContext als Dienst in startup.cs an, und dann instanziiere ich für jeden Controller (der Dependency Injection empfängt) ein entsprechendes Repository, das eine neue Instanz von SampleDbContext weiterleitet. . Ist diese repetitive Instantiierung des DB-Kontexts ein gutes Design für eine Multi-User-Umgebung? Ich nehme an, ich könnte jedes Repository als Dienst für startup.cs hinzufügen, aber das sieht nicht gut aus. Bitte sagen Sie mir eine gute Design-Implementierung für meinen Fall, oder bringen Sie mich auf den richtigen Weg, wenn ich verloren bin.

    
Giancarlo Sierra 21.02.2017, 00:08
quelle

3 Antworten

14

Sie können einfaches Beispiel Wie man das Repository-Muster verwendet:

Sie erstellen Repository-Schnittstelle:

%Vor%

Implementiere es dann:

%Vor%

Dann registrieren Sie sich in ConfigureServices:

%Vor%

Dann injizieren Sie es zum Controller:

%Vor%     
Alexan 21.02.2017, 01:34
quelle
2

Einige argumentieren, dass DbContext selbst ein Repository-Muster ist. Wenn Sie diese Route verwenden möchten, können Sie den Beispielcode unter ASP.NET Core und Angular 2 herunterladen .

Zum Beispiel -

%Vor%

Startup.cs

%Vor%     
Win 21.02.2017 00:52
quelle
1

Ich bin mir nicht sicher, ob es die beste Methode ist, aber ich habe das Repository immer als Schnittstelle erstellt, die die Controller implementieren.

IRepository.cs:

%Vor%

DbInterface.cs:

%Vor%

SomeList ist ein Datentyp, den ich mit allen Eigenschaften definiert habe, die auf einer Seite als Liste angezeigt werden sollen. I.e. eine Liste von Aufgaben in einer Aufgaben-App Einige sind ein definierter Datentyp, der die Details der a -Aufgabe zurückgibt (also wäre die Eingabe taskId oder so).

Gerne korrigiert werden, wenn dies eine schlechte Methode ist.

    
Kris.J 21.02.2017 00:37
quelle