ValidationFx
Support This Project polski English
Używanie ValidationFx jest trywialnie proste. Przeczytaj poniższy tekst, dzięki któremu łatwo i szybko nauczysz się wykorzystywać ValidationFx w swoich projektach.

1. Niezbędne pliki i instalacja

Oczywiście musisz pobrać aktualną wersję biblioteki ValidationFx. Możesz to zrobić na tej stronie. Będziesz jeszcze potrzebował kompilatora PostSharp 1.5. Możesz go pobrać ze strony www.postsharp.org.
Skopiuj pliki ValidationFx.Weaver.dll i ValidationFx.Weaver.psplugin do katalogu plugins, który znajduje się w katalogu instalacyjnym kompilatora PostSharp.

2. Projekt i Referencje

Utwórz nowy projekt w swoim ulubionym środowisku programistycznym, które buduje przy pomocy systemu MsBuild, np. Visual Studio czy SharpDevelop. Dodaj do niego jako referencje blibliotekę ValidationFx.dll. Dodaj także referencję do PostSharp.Public, którego znajdziesz na liście bibliotek zarejestrowanych w Global Assembly Cache.

3. Klasa testowa

Utwórz klasę Test wewnątrz swojego projektu. Utwórz standardową właściwość o dumne nazwie SomeNumber.
public class Test
{
	public int SomeNumber {get; set;}
}

4. Pierwsza walidacja

Dodaj niezbędne importy.
using ValidationFx;
using ValidationFx.Validators;
Oznacz właściwość SomeNumber atrybutem LessThan z parametrem 10, a całą klasę oznacz atrybutem WeaveValidation.
[WeaveValidation]
public class Test
{
	[LessThan(10)]
	public int SomeNumber {get; set;}
}
I to tyle. Możesz przetestować.

5. Przykładowy kod testowy

Test instance = new Test();
			
try
{
	instance.SomeNumber = 53;	
}
catch(Exception e)
{
	Console.WriteLine("Exception of type: {0}", e.GetType());
	Console.WriteLine("Exception message: {0}", e.Message);
	
	if(e.InnerException != null)
	{
		Console.WriteLine("Inner exception of type: {0}", 
                           e.InnerException.GetType());
		Console.WriteLine("Inner exception message: {0}", 
                           e.InnerException.Message);
	}
}
Po uruchomieniu zobaczymy taki komunikat:
Exception of type: System.ArgumentOutOfRangeException
Exception message: (Int32) SomeNumber: Passed value '53' must be less than '10'.

Inner exception of type: ValidationFx.Exceptions.NotLessThanException
Inner exception message: (Int32) SomeNumber: Passed value '53' must be less than '10'.

Walidatory można łączyć

Przykładowo jeśli chcemy, żeby były akceptowane tylko liczby z przedziału (0; 10):
[GreaterThan(0)]
[LessThan(10)]
public int SomeNumber {get; set;}
lub
[Between(0, 10)]
public int SomeNumber {get; set;}

Na stringach też jest prosto

Oto przykład sprawdzania poprawności adresu e-mail:
[NotNullOrEmpty]
[RegexValidator("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$", RegexOptions.IgnoreCase)]
public string Email {get; set;}

Walidacja parametrów

Przykład: param1 z przedziału <0; 10>, ale bez 5, a param2 ma zawierać datę niewcześniejszą niż 1 października 2009. Można to zapisać w ten sposób, ponieważ parametry walidatorów są automatycznie konwertowane [o ile to możliwe] na typ wartości, którą jest poddawana walidacji.
public void SomeMethod([InRange(0, 10)] [NotEqual(5)] int param1, 
                       [GreaterOrEqual("2009-10-01 00:00")] DateTime param2)
{
	//some code
}

Lambda walidatory

[WeaveValidation]
public class Test
{
	static Test()
	{
		ValidationManager.AddValidator("Custom_SomeNumber_Validation_ID",
		                               x => (int)x.Value >= 1 
		                                    && (int)x.Value < 9
		                                    && (int)x.Value % 2 != 1);
	}
	
	[CustomValidation("Custom_SomeNumber_Validation_ID")]
	public int SomeNumber {get; set;}
	
...

Bez PostSharpa też można...

...tylko trzeba dopisać wywołanie ręcznie:
private int _someNumber;
			
[Between(0, 10)]
[NotEqual(5)]
public int SomeNumber
{
	get 
	{
		return _someNumber;
	}
	
	set 
	{
		Validator.ValidateProperty(GetType(), "SomeNumber", this, value);
		_someNumber = value;
	}
}
public void SomeMethod([InRange(0, 10)] [NotEqual(5)] int param1, 
                       [GreaterOrEqual("2009-10-01 00:00")] DateTime param2)
{
	Validator.ValidateParameters(MethodInfo.GetCurrentMethod(), 
	                             this, new object[] {param1, param2});
	
	//some code
}
Umiesz już wystarczająco dużo, żeby korzystać z ValidationFx. Możesz od razu przejść do sekcji pobierania lub poproś o wsparcie.
Get ValidationFx at SourceForge.net. Fast, secure and Free Open Source software downloads