diff --git a/src/Microsoft.AspNet.Mvc.Abstractions/ModelBinding/ModelMetadata.cs b/src/Microsoft.AspNet.Mvc.Abstractions/ModelBinding/ModelMetadata.cs
index 3dd1e7940d..ff87152d6d 100644
--- a/src/Microsoft.AspNet.Mvc.Abstractions/ModelBinding/ModelMetadata.cs
+++ b/src/Microsoft.AspNet.Mvc.Abstractions/ModelBinding/ModelMetadata.cs
@@ -289,6 +289,11 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
///
public abstract string TemplateHint { get; }
+ ///
+ /// Gets a value that indicates whether properties or elements of the model should be validated.
+ ///
+ public abstract bool ValidateChildren { get; }
+
///
/// Gets a collection of metadata items for validators.
///
diff --git a/src/Microsoft.AspNet.Mvc.Core/DependencyInjection/MvcCoreServiceCollectionExtensions.cs b/src/Microsoft.AspNet.Mvc.Core/DependencyInjection/MvcCoreServiceCollectionExtensions.cs
index 598c730495..8b0ad72750 100644
--- a/src/Microsoft.AspNet.Mvc.Core/DependencyInjection/MvcCoreServiceCollectionExtensions.cs
+++ b/src/Microsoft.AspNet.Mvc.Core/DependencyInjection/MvcCoreServiceCollectionExtensions.cs
@@ -134,12 +134,7 @@ namespace Microsoft.Extensions.DependencyInjection
var options = serviceProvider.GetRequiredService>().Value;
return new DefaultCompositeMetadataDetailsProvider(options.ModelMetadataDetailsProviders);
}));
- services.TryAdd(ServiceDescriptor.Singleton(serviceProvider =>
- {
- var options = serviceProvider.GetRequiredService>().Value;
- var modelMetadataProvider = serviceProvider.GetRequiredService();
- return new DefaultObjectValidator(options.ValidationExcludeFilters, modelMetadataProvider);
- }));
+ services.TryAddSingleton();
//
// Random Infrastructure
diff --git a/src/Microsoft.AspNet.Mvc.Core/Internal/MvcCoreMvcOptionsSetup.cs b/src/Microsoft.AspNet.Mvc.Core/Internal/MvcCoreMvcOptionsSetup.cs
index e20fee051a..b89a939b77 100644
--- a/src/Microsoft.AspNet.Mvc.Core/Internal/MvcCoreMvcOptionsSetup.cs
+++ b/src/Microsoft.AspNet.Mvc.Core/Internal/MvcCoreMvcOptionsSetup.cs
@@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
+using System.Threading;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc.Core;
using Microsoft.AspNet.Mvc.Formatters;
@@ -63,13 +64,11 @@ namespace Microsoft.AspNet.Mvc.Internal
options.ModelValidatorProviders.Add(new DefaultModelValidatorProvider());
// Add types to be excluded from Validation
- options.ValidationExcludeFilters.Add(new SimpleTypesExcludeFilter());
- options.ValidationExcludeFilters.Add(typeof(Type));
-
- // Any 'known' types that we bind should be marked as excluded from validation.
- options.ValidationExcludeFilters.Add(typeof(System.Threading.CancellationToken));
- options.ValidationExcludeFilters.Add(typeof(IFormFile));
- options.ValidationExcludeFilters.Add(typeof(IFormCollection));
+ options.ModelMetadataDetailsProviders.Add(new ValidationExcludeFilter(typeof(Type)));
+ options.ModelMetadataDetailsProviders.Add(new ValidationExcludeFilter(typeof(Uri)));
+ options.ModelMetadataDetailsProviders.Add(new ValidationExcludeFilter(typeof(CancellationToken)));
+ options.ModelMetadataDetailsProviders.Add(new ValidationExcludeFilter(typeof(IFormFile)));
+ options.ModelMetadataDetailsProviders.Add(new ValidationExcludeFilter(typeof(IFormCollection)));
}
}
}
\ No newline at end of file
diff --git a/src/Microsoft.AspNet.Mvc.Core/ModelBinding/Metadata/DefaultModelMetadata.cs b/src/Microsoft.AspNet.Mvc.Core/ModelBinding/Metadata/DefaultModelMetadata.cs
index 57de7ad847..48943e456e 100644
--- a/src/Microsoft.AspNet.Mvc.Core/ModelBinding/Metadata/DefaultModelMetadata.cs
+++ b/src/Microsoft.AspNet.Mvc.Core/ModelBinding/Metadata/DefaultModelMetadata.cs
@@ -29,6 +29,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Metadata
private bool? _isReadOnly;
private bool? _isRequired;
private ModelPropertyCollection _properties;
+ private bool? _validateChildren;
private ReadOnlyCollection