2011-10-18 11 views
5

Tengo una configuración de sitio web ASP.NET MVC3 utilizando validación y ninject. El código de validación está funcionando. Sin embargo, establecí un punto de interrupción en el constructor de la clase de validación y noté que cuando solicito mi vista que usa la validación, el constructor recibe varias visitas. Según pruebas muy básicas, parece que la cantidad de veces que se golpea al constructor es igual a la cantidad de propiedades que existen en el objeto. ¿Alguien más ha encontrado algo similar? ¿O alguien puede arrojar más información sobre cómo este tipo de validación funciona detrás de escena? -graciasASP.NET MVC3 Concesionario de validación exitoso varias veces por solicitud

Aquí es el constructor ...

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); 
    } 
} 

Estas son las bibliotecas/recursos que estoy usando (Acabo de recibir los paquetes NuGet y configurado todo en base a la información de los dos enlaces más abajo) :

http://fluentvalidation.codeplex.com/wikipage?title=mvc https://github.com/ninject/ninject.web.mvc.fluentvalidation

+0

Interesante pregunta, ¿sabe exactamente qué está pasando cuando llama (x => x.Id)? Todavía soy nuevo en las expresiones LINQ pero supongo que esto podría tener algo que ver con tu problema –

+0

@CodeRush 'RuleFor (x => x.Id)' significa hacer una regla para la propiedad 'Id' de' Persona x' . @Zoran ¿cómo estás configurando el validador? – shuniar

+0

Estoy familiarizado con Linq y también uso la API con EF Code First. @shuniar: agregué enlaces a los sitios web que utilicé para configurar mi sitio. Realmente no puedo seguir todos los pasos, pero puedo decir que logré que la validación funcione siguiendo los pasos. Solo me gustaría saber por qué ese código recibe tantos golpes. Me preocupa un poco. :) – Zoran

Respuesta

4

me di cuenta de cómo evitar este problema. Aunque esto resuelve mi problema, me gustaría la opinión de los demás sobre si hay alguna consecuencia al hacer esto.

Por lo tanto, en el segundo enlace verás las instrucciones sobre cómo configurar Ninject.

En el segundo paso, debe aplicar el método de extensión "InRequestScope()". Entonces el constructor solo recibirá un golpe por cada solicitud HTTP que use su validador. Eso obviamente significa que solo se crea una instancia del objeto validador por solicitud http, lo cual tiene sentido para mí. No sé si hay alguna consecuencia al usar esta solución?

Bind(match.InterfaceType).To(match.ValidatorType).InRequestScope(); 
Cuestiones relacionadas