MonkeyValidator 1.0.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package MonkeyValidator --version 1.0.1                
NuGet\Install-Package MonkeyValidator -Version 1.0.1                
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="MonkeyValidator" Version="1.0.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add MonkeyValidator --version 1.0.1                
#r "nuget: MonkeyValidator, 1.0.1"                
#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 MonkeyValidator as a Cake Addin
#addin nuget:?package=MonkeyValidator&version=1.0.1

// Install MonkeyValidator as a Cake Tool
#tool nuget:?package=MonkeyValidator&version=1.0.1                

Monkey validator ⇒ a Linq approach to validation

This library aims at making validation easy, fluent and versatile.

Types of Validation

On The Fly

Use this type of validation anywhere in your code. Just called the GetValidator() on any object and start chaining your validation.

on the fly

Reusable

Create an ad-hoc validator class inheriting from CustomMonkeyValidatorBase<T> and build your validator in the abstract SetupValidator() method.

Reusable

validators can be chained, and the validation will pickup all errors before throwing.

MultiChaining

Conditional Validation

You can use an if/else if/else logic for more complex scenarios

ConditionalValidationExample

Fail Fast

If you want to break the validation if a certain condition is met, you can use the FailFastIf() extension, which will throw immediatelly if the predicate returns false.

failfast

Custom On Fail

If you want to insert your own logic on validation failure, you can use the overload that takes an Action<List<string>> where List<string> are the validation errors.

155908647-ed83b6f7-e41c-4529-9191-fca65e934f8c

You can set the optional throwMonkeyException flag to true if you just want to add some logic before the default exception is thrown.

CustomResult

Custom Rules

For on the fly, one time only custom rules, you can simply chain a CustomRule() and pass in your predicate.

155909572-eb2a1cf9-5a9b-4c10-8dd0-9e8c1aef49f3

For rules you want to reuse, but are not specific enough to put on a Validator class, I'd recommend creating a static class to extend the MonkeyValidator<T> with your rule fragments:

155909683-61bad9ca-f50e-49dc-b4f8-92f702faef94

which you can then chain to your other validators.

CustomResult

Injectable Validation

Sometimes, validation can hinder testability. A complex validator can become rather troublesome for testers, especially for testing edge cases where the validation has little to no bearing to the section of code being tested.

We can circumvent the issue by creating an injectable service like so:

injectable validation

This has the added advantage that if we need to inject other services that are required to fulfil our validation, those are encapsulated in the IStringValidator, and thus not required when unit testing. The IStringValidator can then be reused to add all the validation methods related to strings.

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
1.1.3 506 3/3/2022
1.1.2 416 3/1/2022
1.1.1 431 3/1/2022
1.0.1 429 2/28/2022