Невозможно получить услугу в пользовательском беглом валидаторе - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь создать собственный валидатор.Я не могу получить поставщика услуг из пользовательского контекста.Я пытаюсь получить доступ к своим услугам, но я не могу этого сделать.

Свободная проверка добавлена ​​в мое приложение, как предлагает их веб-сайт.

Сообщение об ошибке:

'Поставщик услуг не настроен для работы с FluentValidation.Использование InjectValidator или GetServiceProvider поддерживается только при использовании автоматической интеграции MVC. '

public static class ValidatorExtensions
{
    public static IRuleBuilderInitial<T, string> MustBeRefreshToken<T>(this IRuleBuilder<T, string> ruleBuilder)
    {

        return ruleBuilder.Custom((token, contextPropertyValidatorContext) =>
        {


            var context = contextPropertyValidatorContext.GetServiceProvider();
            var jwtSettings = (JWTSettings)context.GetService(typeof(JWTSettings));

            var meblexDbContext = (MeblexDbContext)context.GetService(typeof(MeblexDbContext));

            var tokenValidationParameters = jwtSettings.GetTokenValidationParameters(jwtSettings.RefreshTokenSecret);

            var jwtService = (IJWTService)context.GetService(typeof(IJWTService));

            try
            {

                var userId = jwtService.GetRefreshTokenUserId(token);

                var userExist = meblexDbContext.Users.FirstOrDefault(x => x.UserId == userId);

                if (userExist == null) contextPropertyValidatorContext.AddFailure("{Property Name} not connected with user");

                var expTicks = int.Parse(jwtService.GetClaimValue("exp", tokenValidationParameters, token));
                var expDate = DateTimeOffset.UnixEpoch.AddSeconds(expTicks);

                if (! (expDate > DateTime.UtcNow))
                {
                    contextPropertyValidatorContext.AddFailure("{Property Name} is expired");
                }
            }
            catch
            {
                contextPropertyValidatorContext.AddFailure("{Property Name} is not valid");
            }
        });
    }
}

}

...