IngeoVisualServices.Core.Validators 1.1.2

Introduction

TODO: Give a short introduction of your project. Let this section explain the objectives or the motivation behind this project.

Getting Started

TODO: Guide users through getting your code up and running on their own system. In this section you can talk about:

  1. Installation process
  2. Software dependencies
  3. Latest releases
  4. API references

Build and Test

TODO: Describe and show how to build your code and run the tests.

Contribute

TODO: Explain how other users and developers can contribute to make your code better.

IngeoVisualServices.Core.Validators

Guía rápida para registrar, usar e implementar validadores.

Registro en DI

En tu configuración de servicios:

using IngeoVisualServices.Core.Validators;
using Microsoft.Extensions.DependencyInjection;

var services = new ServiceCollection();
// Registra servicios base y validadores encontrados en los ensamblados
services.AddValidators(typeof(MyModelValidator).Assembly);

Uso

var validator = sp.GetRequiredService<IValidator<MyModel>>();
bool ok = validator.Validate(model);
var failures = validator.Failures;

Implementación de un validador

Hereda de ValidatorFor<T> y define reglas en el constructor:

using IngeoVisualServices.Core.Validators.Abstractions;
using IngeoVisualServices.Core.Validators.Interfaces;

public class MyModelValidator : ValidatorFor<MyModel>
{
    public MyModelValidator(IValidationService<MyModel> service,
                            IValidator<MyItem> itemValidator) : base(service)
    {
        // String
        AddRuleFor(x => x.Name, "Nombre")
            .WithEmpty()
            .WithLengthBetween(1, 260);

        // Email
        AddRuleFor(x => x.Email, "Email").WithEmail();

        // Numérico
        AddRuleFor(x => x.Age, "Edad").GreaterThan(0);

        // Colección de strings (simple)
        AddRuleFor(x => x.Tags, "Etiquetas")
            .WithEmpty(); // requerido y al menos un item

        // Colección de objetos usando validador de item (como pruebas funcionales)
        AddRuleFor(x => x.Items, "Items")
            .AddRequirement(o => o.Items != null, "Items es requerido")
            .AddRequirement(o => o.Items.All(i => itemValidator.Validate(i)), "Todos los items deben ser válidos");

        // Objeto anidado
        AddRuleFor(x => x.Address, "Dirección")
            .AddRequirement(o => o.Address != null, "Dirección es requerida")
            .AddRequirement(o => AddressValidator.Validate(o.Address!), "Dirección inválida");
    }
}

Uso en un Pipeline Behavior (MediatR)

using MediatR;
using IngeoVisualServices.Core.Validators.Interfaces;

public class ValidationBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
{
    private readonly IValidator<TRequest> _validator;

    public ValidationBehavior(IValidator<TRequest> validator)
    {
        _validator = validator;
    }

    public async Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next, CancellationToken cancellationToken)
    {
        bool ok = _validator.Validate(request);
        if (!ok)
        {
            var failures = _validator.Failures; // List<IFailure>
            // Lanza excepción o transforma failures en resultado según tu diseño
            throw new ValidationException(failures.Select(f => $"{f.PropertyName}: {f.ErrorMessage}"));
        }
        return await next();
    }
}

Registro del behavior:

services.AddMediatR(cfg =>
{
    cfg.RegisterServicesFromAssembly(typeof(Program).Assembly);
});
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));

Reglas disponibles

  • WithEmpty([mensaje]): requerido para string, colecciones, números y referencias.
  • Longitudes: WithLength, WithMinLength, WithMaxLength, WithLengthBetween.
  • Formatos: WithEmail, WithRegex.
  • Comparaciones numéricas: GreaterThan, GreaterOrEqual, LessThan, LessOrEqual, EqualTo.
  • Personalizadas: AddRequirement(expr, mensaje).

Notas

  • Comparaciones solo en propiedades numéricas; en otros tipos se lanza InvalidOperationException.
  • Mensajes son opcionales; se generan por defecto si no se proporcionan.
  • IValidator<T>.Failures retorna List<IFailure> con PropertyName, DisplayName, ErrorMessage.

Si quieres aprender más sobre cómo crear buenos archivos README, consulta las siguientes directrices. También puedes inspirarte en los siguientes archivos README:

Showing the top 20 packages that depend on IngeoVisualServices.Core.Validators.

Packages Downloads
IngeoVisualServices.Core.Security
Biblioteca de clases, para la administración dinamica de seguridad
4
IngeoVisualServices.Core.BlazorComponents
Biblioteca de para la validación de Blazor por medio del MiddleWare
0
IngeoVisualServices.Core.Dispatcher
Biblioteca de clases, para la administraciòn de CQRS con validadores
0
IngeoVisualServices.Core.Security
Biblioteca de clases, para la administración dinamica de seguridad
0

Version Downloads Last updated
1.1.2 13 03/19/2026
1.1.1 0 03/19/2026