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:
- Installation process
- Software dependencies
- Latest releases
- 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>.FailuresretornaList<IFailure>conPropertyName,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
|
2 |
|
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 |
.NET 10.0
- IngeoVisualServices.Core.Entities (>= 3.4.1)
- Microsoft.Extensions.DependencyInjection (>= 10.0.3)