Ok, I found the solution.
The problem I had was that I was trying to completely replace the DataAnnotationsModelValidatorProvider
, but the framework doesn't support that. In the end, I had to look for the current one in place and then register my custom factories which will setup the validation context that will be used in the IValidatableObject
.
One important note to keep in mind, there are multiple namespaces with the DataAnnotationsModelValidatorProvider
, but the one I need is System.Web.Http.Validation.Providers.DataAnnotationsModelValidatorProvider
Here what it looks like:
private static void SetupIoCInValidationContext(
IServiceProvider serviceProvider)
{
IEnumerable<ModelValidatorProvider> modelValidatorProviders =
GlobalConfiguration
.Configuration.Services.GetModelValidatorProviders();
DataAnnotationsModelValidatorProvider provider =
(DataAnnotationsModelValidatorProvider)
modelValidatorProviders.Single(
x =>
x.GetType()
.IsTypeOf(
typeof(DataAnnotationsModelValidatorProvider)));
provider.RegisterDefaultAdapterFactory((providers, attribute) =>
new CustomDataAnnotationsModelValidator(providers, attribute,
serviceProvider));
provider.RegisterDefaultValidatableObjectAdapterFactory(
providers => new CustomValidatableObjectAdapter(providers, serviceProvider)
);
}