Many times the object has a property which allows various implementations of the same interface. Or sometimes, the collection of a given interface may have objects of different types which implement that interface. This article provides information about how to validate such objects using Fluent Validation.
Lets take a hypothetical scenario where an organization needs to store the details about a person. A person may be an employee from the organization or the person may also be a consultant which is hired on contract for specific period of time.
Let’s say there is an application to save this information. This application has a method which takes an input parameter “
SavePersonRequest” which can contain either employee detail or the consultant details.
The interfaces / classes are shown in the code snippet given below.
Let’s create an Console Application project. In this project, let’s add the package FluentValidation to the project.
Inheritance and Validators
Let’s try to add validators now. Adding validators for Employee and Consultant class is easy. These validators are shown in the code snippet given below.
Now, the question is how to validate
SavePersonRequest as it may contain either
Employee details or
Consultant details ?
For that, we need to ensure that
EmployeeValidator should be called if the
SavePersonRequest contains employee details and
ConsultantValidator should be called if the
SavePersonRequest contains consultant details. Fluent validation provides a method
SetInheritanceValidator which can be used for this purpose.
This method takes a function as parameter, and this function can be used to define the child validators.
In the code snippet given below, we have called
SetInheritanceValidator while setting validation rule for
Person property. Then we passed a function to this method, this function calls Add method to pass the employee validators and consultant validators.
Run and Verify
For testing the above mentioned validators, we will need to create two requests – one containing employee details and other containing consultant details. Then we will trigger the request validator and check if it appropriately picks up the validator.
The code given below shows the code that I have added to the
Main method of the console application that we created. It also shows the
SavePerson method, which is triggering the validation.
Now, If I run the application I can see that both validation has failed. From the error messages given in the snapshot given below, we can understand that appropriate validator was picked up by the fluent validation.
I hope you find this information helpful. Let me know your thoughts.