#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 в трехуровневую архитектуру
Комментариев нет:
Отправить комментарий