Net Core Role Manager: использование универсального типа 'RoleManager <TRole>' требует аргументов 1 типа - PullRequest
0 голосов
/ 20 апреля 2019

Я мигрирую проект из Net MVC в MVC Core 2. Я вижу ошибку в последней строке Role Manager.Что в целом заменяет Role Manager в Net Core?

Ошибка:

Using the generic type 'RoleManager<TRole>' requires 1 type arguments

Код:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Linq;

namespace HPE.Kruta.Web
{

    public class CustomerRoleProvider : RoleManager
    {

В исправлениях меня попросили использовать NetIdentity в дополнение к NetCore.Не уверен, что это правильно, применять две библиотеки.

1 Ответ

1 голос
/ 21 апреля 2019

В ядре идентификации нет замены для RoleManager. Это то же самое, что и было.

По умолчанию необходимо передать класс IdentityRole в RoleManager, который является классом роли по умолчанию в Identity.

Если вы хотите расширить IdentityRole и добавить к нему настраиваемые свойства, вы должны извлечь из IdentityRole и добавить в него свой собственный реквизит:

public class ApplicationRole : IdentityRole
{
    public string MyCustomProp { get; set; }
}

И вы должны зарегистрировать свою пользовательскую Ролевую модель в своих услугах:

services.AddIdentity<IdentityUser, ApplicationRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

С этими изменениями, теперь, когда вы хотите использовать RoleManager, вы должны передать ему свой новый настроенный ApplicationRole. Таким образом, Identity будет управлять этим классом вместо стандартного IdentityRole one:

public class HomeController : ControllerBase
{
    private readonly RoleManager<ApplicationRole> _roleManager;

    public HomeController(RoleManager<ApplicationRole> roleManager)
    {
        _roleManager = roleManager;
    }
}

И, наконец, если вы хотите расширить / настроить RoleManager, вы должны передать свою пользовательскую роль в качестве универсального параметра RoleManager:

public class CustomRoleManager : RoleManager<ApplicationRole>
{
    public CustomRoleManager(IRoleStore<ApplicationRole> store,
        IEnumerable<IRoleValidator<ApplicationRole>> roleValidators,
        ILookupNormalizer keyNormalizer,
        IdentityErrorDescriber errors,
        ILogger<RoleManager<ApplicationRole>> logger) :
        base(store, roleValidators, keyNormalizer, errors, logger)
    {
    }
}
...