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)
);
}