コード例 #1
0
 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);
 }
コード例 #2
0
        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();
        }
コード例 #3
0
        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);
                    }
                }
            }
        }
コード例 #4
0
 public ValidatorContext(IEntity entity, IRelationContainer relationContainer, object?configuration)
 {
     Entity            = entity ?? throw new ArgumentNullException(nameof(entity));
     RelationContainer = relationContainer ?? throw new ArgumentNullException(nameof(relationContainer));
     Configuration     = configuration;
 }