Swallow.Validation.ServiceCollection 3.1.0

Install-Package Swallow.Validation.ServiceCollection -Version 3.1.0
dotnet add package Swallow.Validation.ServiceCollection --version 3.1.0
<PackageReference Include="Swallow.Validation.ServiceCollection" Version="3.1.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Swallow.Validation.ServiceCollection --version 3.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Swallow.Validation.ServiceCollection, 3.1.0"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Swallow.Validation.ServiceCollection as a Cake Addin
#addin nuget:?package=Swallow.Validation.ServiceCollection&version=3.1.0

// Install Swallow.Validation.ServiceCollection as a Cake Tool
#tool nuget:?package=Swallow.Validation.ServiceCollection&version=3.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Swallow.Validation

Package Version Comment
Swallow.Validation.Core NuGet Core validation library. Use this if you want to define all assertions and errors yourself.
Swallow.Validation NuGet "Batteries included" version with a handful of assertions and errors.
Swallow.Validation.ServiceCollection NuGet Extension for registering a ValidationContainer and its asserters in an IServiceCollection

Swallow.Validation is a lightweight, fluent-style validation library for C#. But what does that mean? It means minimal dependencies (none, actually) and great developer experience. If you've seen Fluent Assertions, you might find some similarities.

Standout features

Swallow.Validation does not require a separate class to contain the validation logic - you can just drop it right into your code without problems. This allows you to enforce invariants rather than validate the state of entities; instead of constructing a person and checking whether it is correct, you can make sure that no person created can ever be in an invalid state - without needing to remember calling new PersonValidator().Validate(myPerson).

The library is also "natively extensible", meaning you can create custom validation rules that perfectly blend in together with the predefined validation rules and the fluent style. You can create rules matched for your problem domain and use your own ubiquitous language. With the fluent style of the library, you can formulate validation rules directly in your domain language.

Validator.Check()
    .That(() => Country).IsValidIsoCode()
    .That(() => DeliveryDate).IsAfter(DateTime.UtcNow)
    .That(() => Items).IsNotNull().IsNotEmpty()
    .ElseThrow()

Additionally, the validation errors are strongly typed. Instead of throwing around strings everywhere, you have meaningful errors containing properties to describe the problem in an exact manner. You also need not worry about wording your error messages when doing your validation. You can also easily test validation logic this way; instead of comparing strings, you can just check if the error is of the correct type. You can even localize the error messages if you'd like; that way, the validation errors can even be given directly to the user.

Getting started

To get started with the library, check out the validation 101 in the documentation.

If you wish to know more about the validations and what you can do with them, I suggest you just find out by digging through the code or just using the library to build some validations.

And if you feel like something is missing (or just plain broken), feel free to create an issue.

Licensing

Swallow.Validation is licensed under the MIT license. That means you can do whatever you like with it, as long as you give credit by including the library's license when distributing your software.

The logo (the swallow) is taken from www.freevector.com.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
3.1.0 126 6/5/2021
3.0.0 85 5/20/2021
2.0.0 208 3/27/2021
1.2.0 167 11/23/2020
1.1.0 322 7/25/2020
1.0.0 252 6/21/2020