2011-10-18 12 views
5

Mam ustawienia witryny ASP.NET MVC3 przy użyciu biegłej walidacji i ninject. Kod sprawdzania poprawności działa. Jednak ustawiłem punkt przerwania w konstruktorze klasy sprawdzania poprawności i zauważyłem, że kiedy zażądam mojego widoku, który używa sprawdzania poprawności, konstruktor zostanie wielokrotnie trafiony. W oparciu o bardzo podstawowe testy wydaje się, że liczba trafień konstruktora jest równa liczbie właściwości istniejących na obiekcie. Czy ktoś jeszcze natknął się na coś podobnego? Czy ktoś może rzucić więcej informacji na temat tego, jak ten rodzaj sprawdzania działa za kulisami? -dziękiASP.NET MVC3 Fluent Validation Constructor trafiony kilka razy na żądanie

Oto konstruktor ...

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

Oto biblioteki/Zasoby że używam (Właśnie pakiety Nuget i skonfigurowany wszystko w oparciu o informacje z dwóch poniższych linków) :

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

+0

Interesujące pytanie, czy wiesz, co dokładnie dzieje się podczas połączenia (x => x.Id)? Ciągle nie używam wyrażeń LINQ, ale myślę, że to może mieć coś wspólnego z twoim problemem. –

+0

@Rozpoczęcie 'RuleFor (x => x.Id)' oznacza utworzenie reguły dla właściwości 'Id' osoby x' . @Zoran jak konfigurujesz walidator? – shuniar

+0

Jestem zaznajomiony z Linq i ja również używam płynnego API z First Code. @shuniar - dodałem linki do stron, które służyły do ​​konfiguracji mojej witryny. Nie mogę naprawdę przejść przez wszystkie kroki, ale mogę powiedzieć, że dostałem walidację do pracy, wykonując kroki. Chciałbym tylko wiedzieć, dlaczego ten kod zostaje trafiony tyle razy. Trochę mnie to obchodzi. :) – Zoran

Odpowiedz

4

zorientowali się, jak uniknąć tego problemu. Mimo że rozwiązuje to mój problem, chciałabym się dowiedzieć od innych, czy w tym są jakieś konsekwencje?

W drugim linku zobaczysz instrukcje, jak skonfigurować Ninject.

W drugim kroku należy zastosować metodę rozszerzenia "InRequestScope()". Następnie konstruktor będzie trafiony tylko raz na żądanie http, które używa twojego walidatora. To oczywiście oznacza, że ​​tylko jedna instancja obiektu walidatora jest tworzona na żądanie HTTP, co ma dla mnie sens. Nie wiem, czy są jakieś konsekwencje korzystania z tego rozwiązania?

Bind(match.InterfaceType).To(match.ValidatorType).InRequestScope(); 
Powiązane problemy