У меня есть ProjectName.Core
библиотека, содержащая всю мою бизнес-логику, мои сущности и их поведение. В настоящее время нет никакого отношения к Entity Framework или любому другому DAL, потому что мне нравится держать эти вещи отделенными. Конфигурации Entity Framework (с использованием Fluent API) находятся в ProjectName.Infrastructure
проекте, поэтому он заботится о том, чтобы поместить мои объекты в EF. В основном я иду в направлении луковичной архитектуры.
Тем не менее, при добавлении структуры ASP.NET Identity в смесь я должен заставить свою ApplicationUser
сущность наследовать от IdentityUser
класса, но мой ApplicationUser
класс имеет отношения к другим сущностям. Унаследовав от, IdentityUser
я представляю ссылку на Entity Framework в моем проекте лица, единственное место, где я бы не хотел этого делать. Извлечение ApplicationUser
класса из проекта сущностей в Infrastructure
проект (поскольку он использует систему идентификации на основе Entity Framework) приведет к циклическим ссылкам, так что это тоже не тот путь.
Есть ли способ обойти это, чтобы я мог сохранить чистое разделение между двумя уровнями, кроме того, не используя ASP.NET Identity?
источник
Ответы:
Вы можете создать класс User , который не имеет ничего общего с ASP.NET Identity в вашей основной библиотеке.
Если вы используете Entity Framework, создайте класс конфигурации для ваших сущностей (необязательно).
Вам также необходимо создать классы для Role, UserClaim и UserLogin . Вы можете назвать их как угодно, если вам не нравятся вышеперечисленные имена.
В веб-слое создайте класс с именем AppUser (или другое имя, если вы выберете). Этот класс должен реализовывать интерфейс ASP.NET Identity IUser <TKey> , где TKey - это тип данных для первичного ключа ( Guid в приведенном выше примере).
Измените все ссылки на UserManager в веб-проекте на UserManager <AppUser, Guid> .
Наконец, создайте свой собственный UserStore . По сути, пользовательское хранилище UserStore принимает объект AppUser , преобразует его в объект сущности User и сохраняет его. Пример одного из этих методов показан ниже:
Чтобы получить полное описание возможной реализации, нажмите здесь .
В конце концов, это ваш выбор. Измерьте количество усилий, которое потребуется вам для поддержки этой реализации, а не просто ссылки на инфраструктуру Identity в вашей базовой библиотеке. Лично я подумал о том, чтобы сделать это так, как я описал выше, однако я этого не сделал, потому что мне потенциально приходилось бы менять свой код каждый раз при обновлении платформы удостоверений ASP.NET.
Надеюсь, это поможет и ответит на ваш вопрос!
источник