Перенос функций Identity 2.0 в класс репозитория

Я использую идентификатор 2.0 для своего приложения и хочу переместить функции данных на уровень репозитория, например следующий код:

    public class ApplicationDbInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext> {
    protected override void Seed(ApplicationDbContext context) {
        InitializeIdentityForEF(context);
        base.Seed(context);
    }

    //Create [email protected] with password=Admin@123456 in the Admin role        
    public static void InitializeIdentityForEF(ApplicationDbContext db) {
        var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
        var roleManager = HttpContext.Current.GetOwinContext().Get<ApplicationRoleManager>();

теперь проблема в том, что HttpContext не находится на уровне репозитория, и вы должны передать его на этот уровень. но даже если вы это сделаете, вызов должен исходить из слоя Web. но вы не хотите включать userManager в каждый вызов других слоев. любое решение?


person user3311522    schedule 26.05.2014    source источник


Ответы (1)


я нашел способ создать менеджера пользователей на уровне репозитория:

            var roleStore = new RoleStore<IdentityRole>(context);
            var roleManager = new RoleManager<IdentityRole>(roleStore);
            var userStore = new UserStore<ApplicationUser>(context);
            var userManager = new UserManager<ApplicationUser>(userStore);               
            var user = new ApplicationUser { UserName = "sallen" };

            userManager.Create(user, "password");                    
            roleManager.Create(new IdentityRole { Name = "admin" });
            userManager.AddToRole(user.Id, "admin");
person user3311522    schedule 26.05.2014