расширить ASP.NET Core Identity пользователя - PullRequest
0 голосов
/ 22 февраля 2019

Использование структуры карты для моего DI.По умолчанию все работает, однако я хочу добавить fn и ln в базу данных AspNetUser.Я добавил новый класс, например, так:

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

модифицированный Startup.cs:

    services.AddDbContext<AppDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<AppDbContext>()
        .AddDefaultTokenProviders();

Модифицированный ApplicationDbContext:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
}

Контроллер (изменен для AppliationUserот Identityuser):

    public AccountController(
        SignInManager<ApplicationUser> signInManager,
        UserManager<ApplicationUser> userManager)
    {
        m_signInManager = signInManager;
        m_userManager = userManager;
    }

Ошибка, которую я получаю:

StructureMapConfigurationException: экземпляр по умолчанию не зарегистрирован и не может быть автоматически определен для типа 'IUserStore'

Конфигурация IUserStore не указана

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

To Striter:

Легко пропустить обновление классов идентификаторов при создании подклассов.

Итак, идея такова:

1) Проверить базовые предложения вы будетепереопределить от удостоверения: ApplicationUser, ApplicationRole, (если вы изменяете его, не очень часто), ApplicationUserLogin, ApplicationClaims… и т. д. Обратите внимание, что мой пример взят из кода, который я использовал, где я изменил UserRoles, чтобы включить компанию, так что это немного сложнееобъявление.

Например, у вас может быть:

public class ApplicationUser : IdentityUser<int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{ // Code… }

Или (не проверено)

public class ApplicationUser : IdentityUser<int, ApplicationUserLogin, IdentityUserRole<int>, IdentityUserClaim<int>>
{ // Code… }

Затем замените их соответствующим во всех подпрограммах.В случае ShaneKm он, вероятно, оставил это без изменений в DbContext или UserStore:

public class ApplicationDbContext : IdentityDbContext<IdentityUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{ // Code … }

И исправил это так:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{ // Code … }

Для поиска отсутствующих замен, щелкните правой кнопкой мыши на «IdentityUser»"в общедоступном классе ApplicationUser: IdentityUser

2) Иногда вы компилируете, и не все вещи обновляются, поэтому старый объект все еще ссылается на уже измененный код.Бывает со мной часто с WCF.Вы должны очистить каталоги obj и bin (я их удаляю), чтобы все перекомпилировалось.

Надеюсь, это прояснится.

0 голосов
/ 23 февраля 2019

Благодаря @ Джорджу Рохасу я смог решить эту проблему.Не все ссылки были заменены на ApplicationUser.В моем контейнере мне не нужно было вносить никаких изменений.

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