using FluentValidation; using FluentValidation.Results; namespace zero.Validation; public class ZeroValidator : ZeroValidator { } public abstract class ZeroValidator : AbstractValidator, IValidator where TImplementation : TInterface { public ValidationResult Validate(TInterface instance) { if (!(instance is TImplementation)) { throw new ArgumentException($"Parameter {nameof(instance)} has to be of type {typeof(TImplementation)}."); } return base.Validate((TImplementation)instance); } public Task ValidateAsync(TInterface instance, CancellationToken cancellation = default) { if (!(instance is TImplementation)) { throw new ArgumentException($"Parameter {nameof(instance)} has to be of type {typeof(TImplementation)}."); } return base.ValidateAsync((TImplementation)instance, cancellation); } }