Swallow.Validation.ServiceCollection 4.1.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Swallow.Validation.ServiceCollection --version 4.1.0                
NuGet\Install-Package Swallow.Validation.ServiceCollection -Version 4.1.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Swallow.Validation.ServiceCollection" Version="4.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 4.1.0                
#r "nuget: Swallow.Validation.ServiceCollection, 4.1.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. 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=4.1.0

// Install Swallow.Validation.ServiceCollection as a Cake Tool
#tool nuget:?package=Swallow.Validation.ServiceCollection&version=4.1.0                

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.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
7.0.0 130 1/20/2024
6.0.1 206 7/2/2023
6.0.0 283 1/22/2023
5.0.1 353 11/13/2022
5.0.0 426 7/17/2022
4.2.0 440 6/20/2022
4.1.1 431 5/29/2022
4.1.0 461 2/13/2022
4.0.0 421 2/13/2022
3.1.0 356 6/5/2021
3.0.0 294 5/20/2021
2.0.0 419 3/27/2021
1.2.0 405 11/23/2020
1.1.0 555 7/25/2020
1.0.0 484 6/21/2020