Chciałbym użyć atrybutów sprawdzania poprawności danych w zespole biblioteki, tak aby każdy konsument danych mógł je sprawdzić bez użycia modułuBindBinder (na przykład w aplikacji konsoli). Jak mogę to zrobić?Jak mogę użyć atrybutów sprawdzania poprawności danych w języku C# w kontekście innym niż spacja w języku ASP?
Odpowiedz
Właściwie to jest całkiem fajne. Użyłem go ostatnio w implementacji sprawdzania poprawności WFP. Większość osób kończy pisanie dużej ilości kodu za pomocą refleksji, aby dokonać iteracji atrybutów, ale jest w tym wbudowana funkcja.
var vc = new ValidationContext(myObject, null, null);
return Validator.TryValidateObject(myObject, vc, null, true);
Można również sprawdzić atrybuty na jednej nazwie właściwości. Można też ewentualnie przejść na liście w celu uzyskania dostępu do komunikatów o błędach:
var results = new List<ValidationResult>();
var vc = new ValidationContext(myObject, null, null) { MemberName = "UserName"};
var isValid = Validator.TryValidateProperty(value, vc, results);
// get all the errors
var errors = Array.ConvertAll(results.ToArray(), o => o.ErrorMessage);
Klasy System.ComponentModel.DataAnnotations.ValidationAttribute
mają metody, które wykonują logikę sprawdzania poprawności (012). Biorą obiekt (wartość pola, które ozdabiają) i zwracają true
lub false
.
Możesz użyć tych atrybutów i trochę refleksji, aby przetoczyć własny walidator zorientowany na aspekt. Przekaż walidator obiektowi, a walidator otrzyma listę PropertyInfo
s oraz FieldInfo
s. Dla każdego z nich może wywołać GetCustomAttributes
, aby wyszukać te, które dziedziczą po ValidationAttribute
, a dla każdego z nich wywołać IsValid
, przekazując wartość właściwości lub pola. Można to zrobić całkowicie dynamicznie, nie znając struktury klasy, która ma być zatwierdzona w czasie projektowania.
Mogę zadzwonić do 'TryValidateProperty' przechodząc losową instancję' ValidationAttribute' wykonać na? – Shimmy
- 1. Platforma sprawdzania poprawności w języku C#?
- 2. Jak tłumaczyć witrynę w innym języku? (ASP .NET, C#)
- 3. Sprawdzania poprawności wartości komórek Datagridview w języku C#
- 4. ApplicationContextInitializer w kontekście innym niż web Spring?
- 5. Sprawdzanie poprawności HTML5 w języku C#
- 6. Zapobiegaj dziedziczeniu atrybutów sprawdzania poprawności w modelu
- 7. Jak utworzyć procedurę CLR w języku C#, która zostanie wdrożona w schemacie innym niż DBO
- 8. Sprawdzanie poprawności nazwy folderu w języku C#
- 9. Jak mogę wdrożyć IRandomAccessStream w języku C#?
- 10. Safehandle w języku C#
- 11. Jak korzystać z TransactionScope w języku C#?
- 12. W języku Perl, czy lepiej użyć modułu niż wymagać pliku?
- 13. C# - Pobieranie komunikatów o wyjątkach w języku angielskim, gdy aplikacja jest w innym języku?
- 14. Test jednostki debugowania w języku C przy użyciu funkcji sprawdzania
- 15. Wydajność szeregowania w języku C++
- 16. Tworzenie instancji bazy danych w języku C#
- 17. Casting między typami danych w języku C#
- 18. Jak mogę deserializować pikle Pythona w języku C#?
- 19. zmiana komunikatu sprawdzania poprawności w adnotacji danych
- 20. Jak mogę użyć sprawdzania pisowni w Rmarkdown?
- 21. DateTime W języku C#
- 22. `PROCESSENTRY32W` w języku C#?
- 23. SetWindowsHookEx w języku C#
- 24. Błąd sprawdzania poprawności schematu fasoli szparagowej w kontekście kontekstu aplikacji
- 25. Atrybuty parametrów w języku C#
- 26. Czy można kodować java w innym języku?
- 27. Jak wyciąć część obrazu w języku C#
- 28. Używanie pthread w języku C++
- 29. Odczytywanie i przetwarzanie danych pliku WAV w języku C/C++
- 30. Równoczesny słownik w języku C#
Skończyło się na tym, że napisałem dużo kodu do namysłu, aby to zrobić, podczas gdy czekałem na odpowiedź :( –
Tak, zaskakująco niewiele przykładów przy użyciu tego API, i ładuje za pomocą refleksji! – TheCodeKing
nie jest wielkim fanem parametrów wyjściowych, więc podniosłem niestandardowy wyjątek zamiast (niemożliwe do zignorowania) –