Как использовать идентификатор 2.2 и не использовать ILookupNormalizer в ApplicationUserManager

как я могу удалить любую инъекцию ILookupNormalizer в идентичности core3 preview4?

Я использую идентификатор 2.2 и не могу использовать ILookupNormalizer в ApplicationUserManager. Моя контрактура ApplicationUserManager:

public ApplicationUserManager(
            IApplicationUserStore store,
            IOptions<IdentityOptions> optionsAccessor,
            IPasswordHasher<TblUsers> passwordHasher,
            IEnumerable<IUserValidator<TblUsers>> userValidators,
            IEnumerable<IPasswordValidator<TblUsers>> passwordValidators,
            ILookupNormalizer keyNormalizer,
            IdentityErrorDescriber errors,
            IServiceProvider services,
            ILogger<ApplicationUserManager> logger,
            IHttpContextAccessor contextAccessor,
            IUsedPasswordsService usedPasswordsService)
            : base((UserStore<TblUsers, TblOrganizationChart, AbfaContext, int, TblUserClaim, TblUserOrganizationChart, TblUserLogin, TblUserToken, TblRoleClaim>)store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger)

Когда я добавляю ILookupNormalizer в AddCustomServices, у меня появляется эта ошибка:

Метод «NormalizeName» типа «Project.Core.Identity.CS.CustomNormalizers» из сборки «Project.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null» не имеет реализации.

после удаления "services.AddScoped();" У меня есть эта ошибка:

«Метод «NormalizeKey» в типе «Project.Core.Identity.ApplicationUserManager» из сборки «Project.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null» не имеет реализации.

Мне не нужно использовать нормализатор.

Как это решить?


person LPLN    schedule 29.04.2019    source источник


Ответы (1)


Подпись ILookupNormalizer в ядре Identity 3x это отличается от 2x. Если вы хотите продолжить использовать свой старый проект и пока не хотите его обновлять (согласно заголовку вашего вопроса), просто заблокируйте фреймворковую версию вашего решения с помощью global.json. Сначала запустите команду dotnet --list-sdks, чтобы узнать, какие версии установлены. Затем создайте новый в корне вашего решения с помощью команды dotnet new globaljson --sdk-version 2.2.106.

dotnet --list-sdks
dotnet new globaljson --sdk-version 2.2.106
person VahidN    schedule 29.04.2019
comment
Я использую эту команду, и у меня есть эта ошибка: 'Method 'NormalizeKey' in type 'Project.Core.Identity.ApplicationUserManager' from assembly 'Project.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.' Все мои nuget были обновлены. - person LPLN; 29.04.2019
comment
Когда вы блокируете свою версию SDK, вы должны использовать старую подпись ILookupNormalizer, в которой есть string Normalize(string key);. - person VahidN; 29.04.2019
comment
Я делаю это раньше, но снова возникает эта ошибка. Кроме того, я использую этот код: public interface IUserNameLookupNormalizer : ILookupNormalizer {} public interface IEmailLookupNormalizer : ILookupNormalizer {}, но не правильный. - person LPLN; 29.04.2019
comment
Если у вас снова возникает та же ошибка Method 'NormalizeName' does not have an implementation, это означает, что вы все еще используете новый SDK 3x. Убедитесь, что в вашем файле global.json есть версия 2x, а также проверьте файл dependencies. Все они должны указывать на версию 2x. Также удалите все папки bin и obj, чтобы устранить все несоответствия. Теперь снова запустите dotnet restore и dotnet build. - person VahidN; 29.04.2019
comment
Последняя версия Identity — 2.2. Где я могу скачать версию 3.x? - person LPLN; 29.04.2019
comment
Это часть SDK или вашей зависимости Microsoft.AspNetCore.App, расположенной по адресу C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App. - person VahidN; 29.04.2019
comment
Давайте продолжим обсуждение в чате. - person LPLN; 29.04.2019