SimpleInjector и FluentValidationFactory
Я пытаюсь автоматизировать проверку моих моделей представлений, я знаю, что могу просто добавить атрибут, чтобы указать мою проверку, но есть возможность настроить фабрику для автоматизации всего этого, на что я смотрел:этот ответ и придумал это с помощью простого инжектора 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;
}
}
Тогда вид модели может быть чем-то вроде
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);
}
}
Однако переменная реализации всегда равна нулю, я также пробовал RegisterCollection, но все еще имею ту же проблему, похоже, что простой инжектор не знает, как разрешить IValidator, когда валидатор наследует от AbstractValidator (это класс, который реализует IValidator)