Невозможно создать объекты классов идентичности (UserManager и RoleManager). - PullRequest
1 голос
/ 27 апреля 2020

Я занимаюсь разработкой приложения 3-уровневой архитектуры, поэтому я добавляю UserManager и RoleManager в мой UnitOfWork на уровне доступа к данным. Но когда я пытаюсь создать объекты классов UserManager и RoleManager, я получаю следующие ошибки:

There is no argument given that corresponds to the required formal parameter 'optionsAccessor' 
of 'UserManager<IdentityUser>.UserManager(IUserStore<IdentityUser>, IOptions<IdentityOptions>, 
IPasswordHasher<IdentityUser>, IEnumerable<IUserValidator<IdentityUser>>, 
IEnumerable<IPasswordValidator<IdentityUser>>, ILookupNormalizer, IdentityErrorDescriber, 
IServiceProvider, ILogger<UserManager<IdentityUser>>)'

There is no argument given that corresponds to the required formal parameter 'roleValidators'
 of 'RoleManager<IdentityRole>.RoleManager(IRoleStore<IdentityRole>, IEnumerable<IRoleValidator<IdentityRole>>, 
ILookupNormalizer, IdentityErrorDescriber, ILogger<RoleManager<IdentityRole>>)'

Часть моего класса UnitOfWork

    public class IdentityUnitOfWork : IUnitOfWork
    {
        private UserManager<IdentityUser> _userManager;
        private RoleManager<IdentityRole> _roleManager;
        private ApplicationContext _context;

        public IdentityUnitOfWork(ApplicationContext context)
        {
            _userManager = new UserManager<IdentityUser>(context);// error 1
            _roleManager = new RoleManager<IdentityRole>(context);// error 2
            _context = context;
        }
    }

ОБНОВЛЕНИЕ

Когда я пытаюсь чтобы создать мои собственные RoleManager и UserManager классы, я получаю ту же ошибку.

Мой ApplicationRole класс

    public class ApplicationRole : IdentityRole
    {

    }

Мой ApplicationRoleManager класс

    public class ApplicationRoleManager : RoleManager<ApplicationRole>
    {
        public ApplicationRoleManager(RoleStore<ApplicationRole> store)
                    : base(store)// error in a here (in a base)
        {

        }
    }

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Вы добавили службу идентификации в контейнер Io C. Таким образом, вы можете использовать внедрение зависимостей в конструктор UnitOfWork следующим образом:

public class IdentityUnitOfWork : IUnitOfWork
{
    private UserManager<IdentityUser> _userManager;
    private RoleManager<IdentityRole> _roleManager;
    private ApplicationContext _context;

    public IdentityUnitOfWork(ApplicationContext context, 
        UserManager<IdentityUser> userManager,
        RoleManager<IdentityRole> roleManager)
    {
        _userManager = userManager;
        _roleManager = roleManager;
        _context = context;
    }
}
0 голосов
/ 27 апреля 2020

Вместо прямой передачи контекста в диспетчер пользователей и ролей необходимо создать хранилище пользователей и ролей и передать контекст в хранилище пользователей и ролей, например:

 public class IdentityUnitOfWork : IUnitOfWork
    {
        private UserManager<IdentityUser> _userManager;
        private RoleManager<IdentityRole> _roleManager;
        private DbContext _context;

        public IdentityUnitOfWork(DbContext context)
        {
            _userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(context));
            _roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
            _context = context;
        }
    }

Ошибка также предлагает использовать хранилище пользователей и роли магазин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...