Mam ProjectName.Core
bibliotekę zawierającą całą moją logikę biznesową oraz moje podmioty i ich zachowanie. Obecnie nie ma żadnego związku z Entity Framework lub jakimkolwiek innym DAL, ponieważ lubię, aby te rzeczy były oddzielone. Konfiguracje Entity Framework (przy użyciu Fluent API) znajdują się w ProjectName.Infrastructure
projekcie, który zajmuje się popychaniem moich jednostek do EF. Zasadniczo zmierzam w kierunku architektury podobnej do cebuli.
Jednak podczas dodawania frameworku tożsamości ASP.NET do miksu muszę sprawić, by moja ApplicationUser
jednostka dziedziczyła po IdentityUser
klasie, ale moja ApplicationUser
klasa ma relacje z innymi jednostkami. Dziedzicząc po IdentityUser
, wprowadzam odniesienie do Entity Framework w moim projekcie encji, jedynym miejscu, w którym nie chciałbym tego robić. Wyciągnięcie ApplicationUser
klasy z projektu encji do Infrastructure
projektu (ponieważ korzysta ona z systemu tożsamości opartego na Entity Framework) spowoduje powstanie referencji cyklicznych, więc nie jest to również dobra droga.
Czy jest jakiś sposób, aby to obejść, dzięki czemu mogę zachować czystą separację między dwiema warstwami poza tym, że nie używam tożsamości ASP.NET?
źródło
Odpowiedzi:
Możesz utworzyć klasę użytkownika , która nie ma nic wspólnego z tożsamością ASP.NET w bibliotece podstawowej.
Jeśli używasz Entity Framework, utwórz klasę konfiguracji dla swoich encji (opcjonalnie).
Będziesz musiał także utworzyć klasy dla Roli, UserClaim i UserLogin . Możesz nazwać je, jak chcesz, jeśli nie lubisz powyższych nazwisk.
W warstwie internetowej utwórz klasę o nazwie AppUser (lub inną nazwę, jeśli wybierzesz). Ta klasa powinna implementować interfejs ASP.NET Identity IUser <TKey> , gdzie TKey jest typem danych dla klucza podstawowego ( Guid w powyższym przykładzie).
Zmień wszystkie odniesienia do UserManager w projekcie internetowym na UserManager <AppUser, Guid> .
Na koniec utwórz własny magazyn użytkownika . Zasadniczo niestandardowy magazyn użytkownika pobierze obiekt AppUser , przekształci go w obiekt encji użytkownika , a następnie utrwali . Przykład jednej z tych metod pokazano poniżej:
Aby uzyskać pełny opis możliwej implementacji, kliknij tutaj .
W końcu to twój wybór. Zmierz wysiłek włożony w utrzymanie tej implementacji, a nie tylko odwołanie się do struktury tożsamości w bibliotece Core. Osobiście myślałem o zrobieniu tego w sposób opisany powyżej, jednak tego nie zrobiłem, ponieważ potencjalnie musiałbym zmieniać kod przy każdej aktualizacji środowiska tożsamości ASP.NET.
Mam nadzieję, że to pomoże i odpowie na twoje pytanie!
źródło