Im MVC-Projekt im genannten Arbeits ich fliessend Validation verwenden, um einige Validierungslogik zu implementieren und ich definierte meine UnityValidatorFactory
, wie folgend:Fluent Validierung und IOC-Container: CreateInstance oft in MVC Web-Anwendung
public class UnityValidatorFactory : ValidatorFactoryBase
{
private readonly IUnityContainer _container;
public UnityValidatorFactory(IUnityContainer container)
{
_container = container;
}
public override IValidator CreateInstance(Type validatorType)
{
if (_container.IsRegistered(validatorType))
{
return _container.Resolve(validatorType) as IValidator;
}
return null;
}
}
In global. asax i registriere meine Klasse wie folgt:
var validationFactory = new UnityValidatorFactory(container);
var fluentValidationModelValidatorProvider = new FluentValidationModelValidatorProvider(validationFactory);
definierte ich meinen Validator für mein Viewmodel:
public class ServiceRequestViewModelValidator : AbstractValidator<ServiceRequestViewModel>
{
public ServiceRequestViewModelValidator()
{
// many validation rules here...
}
}
ich meine Validator in der Einheit registrieren:
container.RegisterType<IValidator<ServiceRequestViewModel>, ServiceRequestViewModelValidator>();
Wenn ich Daten an die Aktion schreiben mit dem Argument vom Typ ServiceRequestViewModel die Methode CreateInstance so oft genannt wird, und die Konstruktor ServiceRequestViewModelValidator auch. Da die von mir implementierten Validierungsregeln zeitaufwendig sind, werden sie nicht mehr als einmal ausgeführt. Außerdem verstehe ich nicht, warum sie mehr als einmal angerufen werden.