public ApiEditContextWrapper( UsageType usageType, EntityState entityState, TEntity entity, TEntity referenceEntity, IParent?parent, IRelationContainer relationContainer, IServiceProvider serviceProvider) { UsageType = usageType; EntityState = entityState; Entity = entity; Parent = parent; _relationContainer = relationContainer; _formState = new FormState(entity, serviceProvider); _formState.PopulatePropertyStatesUsingReferenceEntity(referenceEntity); }
public ApiEditContextWrapper( UsageType usageType, EntityState entityState, TEntity entity, TEntity referenceEntity, IParent?parent, IRelationContainer relationContainer, IServiceProvider serviceProvider) { UsageType = usageType; EntityState = entityState; Entity = entity; Parent = parent; _relationContainer = relationContainer; _formState = new FormState(entity, serviceProvider); _formState.PopulatePropertyStatesUsingReferenceEntity(referenceEntity); _dataValidationProviders = _relationContainer.Relations.Select(relation => new ApiDataProvider(relation)).ToList(); }
public static async IAsyncEnumerable <ValidationResult> ValidateAsync( IReadOnlyList <ValidationSetup> validators, IRelationContainer relationContainer, IServiceProvider serviceProvider, IEntity entity, string?propertyName = default) { foreach (var validatorSetup in validators) { var isVariantValidator = validatorSetup.Type.HasInterface(typeof(IEntityValidator <>).MakeGenericType(entity.GetType())) || validatorSetup.Type.HasInterface(typeof(IAsyncEntityValidator <>).MakeGenericType(entity.GetType())); var isGenericVariantValidator = validatorSetup.Type.HasInterface(typeof(IEntityValidator <IEntity>)) || validatorSetup.Type.HasInterface(typeof(IAsyncEntityValidator <IEntity>)); var isVariantValidatorForOtherEntity = validatorSetup.Type.HasGenericInterface(typeof(IEntityValidator <>)) || validatorSetup.Type.HasGenericInterface(typeof(IAsyncEntityValidator <>)); var isGenericValidator = validatorSetup.Type.HasInterface(typeof(IEntityValidator)) || validatorSetup.Type.HasInterface(typeof(IAsyncEntityValidator)); if (isVariantValidator || isGenericVariantValidator || (!isVariantValidator && !isVariantValidatorForOtherEntity && isGenericValidator)) { var validationResult = serviceProvider.GetService(validatorSetup.Type) switch { IEntityValidator validator => validator.Validate(new ValidatorContext(entity, relationContainer, validatorSetup.Configuration)), IAsyncEntityValidator asyncValidator => await asyncValidator.ValidateAsync(new ValidatorContext(entity, relationContainer, validatorSetup.Configuration)), _ => throw new InvalidOperationException($"Invalid entity validator given. {validatorSetup.Type.Name} is not included in Service Collection or is not a {typeof(IEntityValidator).Name} or {typeof(IAsyncEntityValidator).Name}.") }; foreach (var result in FlattenCompositeValidationResults(validationResult).Where(x => string.IsNullOrWhiteSpace(propertyName) || x.MemberNames.Contains(propertyName))) { yield return(result); } } } }
public ValidatorContext(IEntity entity, IRelationContainer relationContainer, object?configuration) { Entity = entity ?? throw new ArgumentNullException(nameof(entity)); RelationContainer = relationContainer ?? throw new ArgumentNullException(nameof(relationContainer)); Configuration = configuration; }