I am using FluentValidation in my application to verify my entities, but I have come up with a little issue. My validation factory is setup to resolve validation classes from Windsor by attempting to resolve from the IValidator<EntityType> interface.
I want to make sure that whenever a validation class is creating that no one forgets to register it with Windsor.
Essentially I want to look at all classes in the assembly that implement the IValidator<EntityType> interface and call WindsorContainer.Resolve(typeof(IValidator<EntityType>)) to resolve that type, where EntityType can be any class in the assembly. So far, using reflection I have been able to pull out all classes that are derived from the generic interface IValidator<> but I can’t figure out how to proceed from there. The problem is I would have to find some way to pull out the actual entity used in the generic in order to call Windsor correctly, and I am at a loss of how to do that.
Is there an easier way to do this?
Why are you doing this? You should have an installer that automatically discovers these validation classes and registers them for you. Then you only need to test that you coded the installer correctly.
The fact that someone adds a class that implements
IValidator<TEntity>for someTEntityshouldn’t break your code!You want
Type.GetGenericArguments.