Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Asp .Net Mvc трехуровневая архитектура

#c_sharp #net #aspnet_mvc #архитектура


Как правильно создать приложения на asp .net mvc 5 с трехуровневой архитектурой используя
identy 2.0? 

У меня есть приложение на ASP.NET MVC5, состоящее из трех слоев: PLL, BLL, DAL. В
DAL расположены репозитории для работы с БД, в BLL лежат хелперы, к каждой сущности.
В PLL непосредственно расположены модели, вьюхи и контроллеры, в контроллерах естественно
используются методы из BLL.

Кроме того в PLL находятся классы Identy 2.0. То есть в моем приложении имеются два
Db контекста, что несомненно приведет к коллизиям.

Я хочу узнать как распределить классы Identity 2.0 в моем приложении так, что бы
они использовали единственный DB контекст расположенный в DAL. То есть имеется цель
переделать ПОЛНОСТЬЮ мое приложение под трехслойную архитектуру.
    


Ответы

Ответ 1



Если вас не устраивют стандартные методы, которыми Identity 2.0 работает с базой, вы можете полностью заменить из на свои: Объявить свой тип для пользователя: public class ApplicationUser : IUser { ... } Объявить свой тип хранилища пользователей и реализовать его с использованием уже существующего BLL/DAL: public class CustomUserStore : IUserStore { ... } Объявить наследника от UserManager: public class CustomUserManager : UserManager { public CustomUserManager(CustomUserStore store) : base(store) { this.PasswordHasher = new CustomPasswordHasher(); } public static CustomUserManager Create(IdentityFactoryOptions options, IOwinContext context) { var manager = new CustomUserManager(new CustomUserStore()); return manager; } } и зарегистрировать CustomUserManager в App_Start: app.CreatePerOwinContext(CustomUserManager.Create); CustomUserStore и CustomUserManager переностите или в BLL, или частично оставляете в PLL (зависит от того, как вы их реализуете). Я бы оставил их в PLL, вписав в их методах вызовы BLL. Или, возможно, вам будет достаточно стандартной реализации UserStore, тогда достаточно будет создать пустой класс-наследник CustomUserManager и зарегистрировать и его, и фабрику для контектов: public static ApplicationDbContext Create() { return new ApplicationDbContext(); } public static CustomUserManager Create(IdentityFactoryOptions options, IOwinContext context) { var manager = new CustomUserManager((new UserStore(context.Get()));); return manager; } public void ConfigureAuth(IAppBuilder app) { app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContext(CustomUserManager.Create); } Код вживую не проверял, но должно работать

Ответ 2



Вот здесь неплохо описан процесс внедрения Identity в трехуровневую архитектуру

Комментариев нет:

Отправить комментарий