SimpleInjector y FluentValidationFactory
Estoy tratando de automatizar la validación de mis modelos de vista, sé que puedo agregar un atributo para especificar mi validación, pero hay una opción para configurar una fábrica para automatizar todo eso, miré:esta respuesta y se me ocurrió esto usando el inyector simple 3.1:
public class CustomValidatorFactory:ValidatorFactoryBase
{
private readonly Container siContainer;
public CustomValidatorFactory(Container siContainer)
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
this.siContainer = siContainer;
this.siContainer.Register(typeof(IValidator<>), assemblies);
}
public override IValidator CreateInstance(Type validatorType)
{
//var instances = siContainer.GetAllInstances(validatorType);
var implementation = ((IServiceProvider)siContainer).GetService(validatorType);
var validatorInstance = implementation != null ? (implementation as IValidator) : null;
return validatorInstance;
}
}
Entonces el modelo de vista puede ser algo así como
public class Person {
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
}
public class PersonValidator : AbstractValidator<Person> {
public PersonValidator() {
RuleFor(x => x.Id).NotNull();
RuleFor(x => x.Name).Length(0, 10);
RuleFor(x => x.Email).EmailAddress();
RuleFor(x => x.Age).InclusiveBetween(18, 60);
}
}
Sin embargo, la variable de implementación siempre es nula, también he intentado RegisterCollection pero todavía tengo el mismo problema, parece que un inyector simple no sabe cómo resolver IValidator cuando el validador hereda de AbstractValidator (esta es la clase que implementa IValidator)