Ich verwende FluentValidation und Ninject. Ich versuche, einen Dienst in AbstractValidatorFluentValidation + Ninject: Wie man AbstractValidator für die Abhängigkeitsinjektion einrichtet
[Validator(typeof(CompetitionFormModelValidator))]
public class CompetitionFormModel
{
public string FirstName { get; set; }
}
und für meine Validierung zu injizieren:
public class CompetitionFormModelValidator : AbstractValidator<CompetitionFormModel>
{
IUserService UserService;
public CompetitionFormModelValidator(IUserService UserService)
{
this.UserService= UserService;
RuleFor(c => c.FirstName).NotEmpty().WithMessage(" ").Length(1, 100);
Custom(c =>
{
//.. try uusing UserService here
return null;
});
}
}
In meinem global.asax.cs
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
var ninjectValidatorFactory = new NinjectValidatorFactory(new StandardKernel());
ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(ninjectValidatorFactory));
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
FluentValidationModelValidatorProvider.Configure(x => x.ValidatorFactory = ninjectValidatorFactory);
}
In NinjectWebCommon.cs
private static void RegisterServices(IKernel kernel)
{
AssemblyScanner.FindValidatorsInAssembly(Assembly.GetExecutingAssembly())
.ForEach(match => kernel.Bind(match.InterfaceType)
.To(match.ValidatorType));
kernel.Bind<IUserService>().To<UserService>();
}
Das Projekt compi les gut. Als ich nicht versuchte, DI zu verwenden, funktionierte Validierung auch gut. Jetzt, da ich versuche, IUserService zu injizieren, wird die Validierung nicht aufgerufen.
Habe ich die Konfiguration von ninject.web.mvc.fluentvalidation richtig eingerichtet? Jede Hilfe würde sehr geschätzt werden.