Ich bin ziemlich neu in der MVP und der Entity Framework Welt, also ertragen Sie mit mir.
Ich habe derzeit eine Kombination aus Ansicht + Moderator, die Ansicht hat zwei Ereignisse, Bearbeiten und Löschen, und der Moderator lauscht nur auf diese Ereignisse. Ich habe auch ein Service-Objekt und Repositorys eingerichtet. Die Service-Schicht benötigt einige Repository-Implementierungen, die einen ObjectContext verwenden, so dass die Reihenfolge der Konstruktion lautet (das oberste Objekt wird an das darunter liegende Objekt übergeben:
) %Vor%Nun das Problem ist, dass, wenn ich oben Objektkontext erstellen, es für die ganze Zeit lebt, die der Moderator am Leben ist, was bedeutet, dass Bearbeiten und Löschen die gleiche Kontextinstanz aus dem Dienst verwenden.
Das Aufrufen von ServiceObject.Delete und ServiceObject.Edit verwendet denselben Kontext, der die Änderungsverfolgung erschwert. Von dem, was ich verstehe, sollte der Kontext eigentlich nur kurzlebig sein und nur für eine Arbeitseinheit, für mich Edit und Delete sind beide unterschiedlich viel Arbeit.
Wie machen Sie DI mit dem Entity-Framework und verwalten weiterhin die Kontextlebensdauer?
Ich habe Leute gesehen, die den Objektkontext auf der Seite des Repositories einfach neu haben, ist das ein gutes Muster.
Oder sollte ich das im Service-Objekt tun, etwa so:
%Vor%Aber wenn ich es so mache, gebe ich mein Repository nicht mehr in den Konstruktor von ServiceObject und mache nicht DI :(.
Was kann ich in dieser Situation tun?
Kennt jemand Open-Source-Projekte, die ich mir anschauen kann, die mir bei diesem Problem helfen können?
Danke.
Ich gehe von oben (Moderator) und beschreibe die Beziehungen zwischen den Teilnehmern.
Presenter ruft das Dienstobjekt über die Abhängigkeit ab. Die Service-Funktionalität wird anhand des Vertrags erläutert:
%Vor%Die Implementierung des Dienstes wird von einer bestimmten Implementierung der Datenzugriffsebene abstrahiert. Grundsätzlich, wenn der Dienst eine Aktion ausführt, die eine Datenquelleninteraktion erfordert, erstellt er eine Instanz der Arbeitseinheit und entsorgt sie, wenn sie beendet ist.
%Vor%Die Implementierung von IUnitOfWork empfängt die Instanz von IUnityContainer und erstellt dann einen untergeordneten Container und registriert die ObjectContext-Instanz dort. Dieser untergeordnete Container wird zum Erstellen von Repositories und zum Weitergeben von ObjectContext verwendet.
Hier ist eine vereinfachte Implementierung von IUnitOfWork:
%Vor%Tags und Links c# entity-framework dependency-injection