Ich habe eine ProjectName.Core
Bibliothek, die meine gesamte Geschäftslogik und meine Entitäten sowie deren Verhalten enthält. Derzeit gibt es keinerlei Beziehung zu Entity Framework oder einem anderen DAL, da ich diese Dinge gerne getrennt halte. Die Entity Framework-Konfigurationen (unter Verwendung der Fluent-API) befinden sich in einem ProjectName.Infrastructure
Projekt, sodass meine Entitäten in EF verschoben werden. Grundsätzlich gehe ich in Richtung einer zwiebelartigen Architektur.
Wenn ich jedoch das ASP.NET-Identitätsframework zum Mix hinzufüge, muss ich meine ApplicationUser
Entität von der IdentityUser
Klasse erben lassen, aber meine ApplicationUser
Klasse hat Beziehungen zu anderen Entitäten. Beim Erben von führe IdentityUser
ich in meinem Entities-Projekt einen Verweis auf Entity Framework ein, den einen Ort, an dem ich dies nicht tun möchte. Das Herausziehen der ApplicationUser
Klasse aus dem Entities-Projekt in das Infrastructure
Projekt (da ein auf Entity Framework basierendes Identitätssystem verwendet wird) führt zu Zirkelverweisen, sodass dies auch nicht der richtige Weg ist.
Gibt es eine Möglichkeit, dies zu umgehen, damit ich die saubere Trennung zwischen den beiden Ebenen beibehalten kann, ohne ASP.NET Identity zu verwenden?
quelle
Antworten:
Sie können eine Benutzerklasse erstellen , die nichts mit ASP.NET Identity in Ihrer Kernbibliothek zu tun hat.
Wenn Sie Entity Framework verwenden, erstellen Sie eine Konfigurationsklasse für Ihre Entitäten (optional).
Sie müssten auch Klassen für Role, UserClaim und UserLogin erstellen . Sie können sie beliebig benennen, wenn Ihnen die oben genannten Namen nicht gefallen.
Erstellen Sie in der Webebene eine Klasse namens AppUser (oder einen anderen Namen, wenn Sie dies wünschen). Diese Klasse sollte die ASP.NET Identity IUser <TKey> -Schnittstelle implementieren, wobei TKey der Datentyp für den Primärschlüssel ist ( Guid im obigen Beispiel).
Ändern Sie alle Verweise auf UserManager im Webprojekt in UserManager <AppUser, Guid> .
Erstellen Sie schließlich Ihren eigenen UserStore . Im Wesentlichen nimmt der benutzerdefinierte UserStore das AppUser- Objekt auf, konvertiert es in ein User- Entity-Objekt und behält es dann bei. Ein Beispiel für eine dieser Methoden ist unten dargestellt:
Klicken Sie hier, um eine vollständige Beschreibung einer möglichen Implementierung zu erhalten .
Am Ende haben Sie die Wahl. Messen Sie den Aufwand, den Sie für die Wartung dieser Implementierung benötigen, anstatt nur auf das Identity-Framework in Ihrer Core-Bibliothek zu verweisen. Persönlich habe ich darüber nachgedacht, es so zu machen, wie ich es oben beschrieben habe, aber ich habe es nicht getan, weil ich möglicherweise meinen Code jedes Mal ändern müsste, wenn das ASP.NET Identity Framework aktualisiert wird.
Hoffentlich hilft das und beantwortet Ihre Frage!
quelle