diff --git a/src/Microsoft.AspNetCore.Mvc.Core/Internal/MvcCoreMvcOptionsSetup.cs b/src/Microsoft.AspNetCore.Mvc.Core/Internal/MvcCoreMvcOptionsSetup.cs index f03e2ca661..21bb72eb27 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/Internal/MvcCoreMvcOptionsSetup.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/Internal/MvcCoreMvcOptionsSetup.cs @@ -77,13 +77,13 @@ namespace Microsoft.AspNetCore.Mvc.Internal options.ValueProviderFactories.Add(new JQueryFormValueProviderFactory()); // Set up metadata providers - ConfigureAdditionalModelMetadataDetailsProvider(options.ModelMetadataDetailsProviders); + ConfigureAdditionalModelMetadataDetailsProviders(options.ModelMetadataDetailsProviders); // Set up validators options.ModelValidatorProviders.Add(new DefaultModelValidatorProvider()); } - internal static void ConfigureAdditionalModelMetadataDetailsProvider(IList modelMetadataDetailsProviders) + internal static void ConfigureAdditionalModelMetadataDetailsProviders(IList modelMetadataDetailsProviders) { // Don't bind the Type class by default as it's expensive. A user can override this behavior // by altering the collection of providers. diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ControllerBaseTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ControllerBaseTest.cs index 4ff9dac6ec..f993e61803 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ControllerBaseTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ControllerBaseTest.cs @@ -2327,7 +2327,7 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test public async Task TryUpdateModel_FallsBackOnEmptyPrefix_IfNotSpecified() { // Arrange - var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); + var metadataProvider = new EmptyModelMetadataProvider(); var valueProvider = Mock.Of(); var binder = new StubModelBinder(context => { @@ -2356,7 +2356,7 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test // Arrange var modelName = "mymodel"; - var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); + var metadataProvider = new EmptyModelMetadataProvider(); var valueProvider = Mock.Of(); var binder = new StubModelBinder(context => { @@ -2578,7 +2578,7 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test // Arrange var modelName = "mymodel"; - var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); + var metadataProvider = new EmptyModelMetadataProvider(); var valueProvider = Mock.Of(); var binder = new StubModelBinder(context => { @@ -2606,7 +2606,7 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test // Arrange var modelName = "mymodel"; - var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); + var metadataProvider = new EmptyModelMetadataProvider(); var valueProvider = Mock.Of(); var binder = new StubModelBinder(context => { @@ -2834,7 +2834,7 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test private static ControllerBase GetController(IModelBinder binder, IValueProvider valueProvider) { - var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); + var metadataProvider = new EmptyModelMetadataProvider(); var services = new ServiceCollection(); services.AddSingleton(NullLoggerFactory.Instance); diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ActionSelectorTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ActionSelectorTest.cs index 5a5dbe7787..a6e1b415cc 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ActionSelectorTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ActionSelectorTest.cs @@ -791,7 +791,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure var manager = GetApplicationManager(controllerTypes); - var modelProvider = new DefaultApplicationModelProvider(options, TestModelMetadataProvider.CreateDefaultProvider()); + var modelProvider = new DefaultApplicationModelProvider(options, new EmptyModelMetadataProvider()); var provider = new ControllerActionDescriptorProvider( manager, diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/AuthorizationApplicationModelProviderTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/AuthorizationApplicationModelProviderTest.cs index 5015aaa56a..866f13e461 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/AuthorizationApplicationModelProviderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/AuthorizationApplicationModelProviderTest.cs @@ -169,7 +169,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal { var defaultProvider = new DefaultApplicationModelProvider( Options.Create(new MvcOptions()), - TestModelMetadataProvider.CreateDefaultProvider()); + new EmptyModelMetadataProvider()); var context = new ApplicationModelProviderContext(new[] { controllerType.GetTypeInfo() }); defaultProvider.OnProvidersExecuting(context); diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerActionDescriptorProviderTests.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerActionDescriptorProviderTests.cs index 0afae5ae78..6fcaadbd27 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerActionDescriptorProviderTests.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerActionDescriptorProviderTests.cs @@ -709,7 +709,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal var manager = GetApplicationManager(new[] { controllerTypeInfo }); var options = Options.Create(new MvcOptions()); options.Value.Conventions.Add(new TestRoutingConvention()); - var modelProvider = new DefaultApplicationModelProvider(options, TestModelMetadataProvider.CreateDefaultProvider()); + var modelProvider = new DefaultApplicationModelProvider(options, new EmptyModelMetadataProvider()); var provider = new ControllerActionDescriptorProvider( manager, new[] { modelProvider }, @@ -1397,7 +1397,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal var manager = GetApplicationManager(new[] { controllerTypeInfo }); - var modelProvider = new DefaultApplicationModelProvider(options, TestModelMetadataProvider.CreateDefaultProvider()); + var modelProvider = new DefaultApplicationModelProvider(options, new EmptyModelMetadataProvider()); var provider = new ControllerActionDescriptorProvider( manager, @@ -1413,7 +1413,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal var options = Options.Create(new MvcOptions()); var manager = GetApplicationManager(controllerTypeInfos); - var modelProvider = new DefaultApplicationModelProvider(options, TestModelMetadataProvider.CreateDefaultProvider()); + var modelProvider = new DefaultApplicationModelProvider(options, new EmptyModelMetadataProvider()); var provider = new ControllerActionDescriptorProvider( manager, @@ -1432,7 +1432,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal var manager = GetApplicationManager(new[] { controllerTypeInfo }); - var modelProvider = new DefaultApplicationModelProvider(options, TestModelMetadataProvider.CreateDefaultProvider()); + var modelProvider = new DefaultApplicationModelProvider(options, new EmptyModelMetadataProvider()); var provider = new ControllerActionDescriptorProvider( manager, diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerActionInvokerCacheTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerActionInvokerCacheTest.cs index 19b1b3b171..9243142b58 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerActionInvokerCacheTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerActionInvokerCacheTest.cs @@ -102,7 +102,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal { var descriptorProvider = new CustomActionDescriptorCollectionProvider( new[] { controllerContext.ActionDescriptor }); - var modelMetadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); + var modelMetadataProvider = new EmptyModelMetadataProvider(); var modelBinderFactory = TestModelBinderFactory.CreateDefault(); var mvcOptions = Options.Create(new MvcOptions { diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/DefaultApplicationModelProviderTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/DefaultApplicationModelProviderTest.cs index c7f548efa8..e052aed8aa 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/DefaultApplicationModelProviderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/DefaultApplicationModelProviderTest.cs @@ -40,7 +40,9 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void OnProvidersExecuting_AddsControllerProperties() { // Arrange - var builder = new TestApplicationModelProvider(); + var builder = new TestApplicationModelProvider( + new MvcOptions { AllowValidatingTopLevelNodes = true }, + TestModelMetadataProvider.CreateDefaultProvider()); var typeInfo = typeof(ModelBinderController).GetTypeInfo(); var context = new ApplicationModelProviderContext(new[] { typeInfo }); @@ -84,7 +86,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal var detailsProvider = new BindingSourceMetadataProvider(typeof(string), BindingSource.Services); var modelMetadataProvider = TestModelMetadataProvider.CreateDefaultProvider(new[] { detailsProvider }); var typeInfo = typeof(ModelBinderController).GetTypeInfo(); - var provider = new TestApplicationModelProvider(Options.Create(new MvcOptions()), modelMetadataProvider); + var provider = new TestApplicationModelProvider(new MvcOptions(), modelMetadataProvider); var context = new ApplicationModelProviderContext(new[] { typeInfo }); @@ -124,7 +126,9 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void OnProvidersExecuting_AddsBindingSources_ForActionParameters() { // Arrange - var builder = new TestApplicationModelProvider(); + var builder = new TestApplicationModelProvider( + new MvcOptions { AllowValidatingTopLevelNodes = true }, + TestModelMetadataProvider.CreateDefaultProvider()); var typeInfo = typeof(ModelBinderController).GetTypeInfo(); var context = new ApplicationModelProviderContext(new[] { typeInfo }); @@ -166,9 +170,9 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void OnProvidersExecuting_AddsBindingSources_ForActionParameters_WithLegacyValidationBehavior() { // Arrange - var modelMetadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); - var options = Options.Create(new MvcOptions { AllowValidatingTopLevelNodes = false }); - var builder = new TestApplicationModelProvider(options, modelMetadataProvider); + var builder = new TestApplicationModelProvider( + new MvcOptions(), + TestModelMetadataProvider.CreateDefaultProvider()); var typeInfo = typeof(ModelBinderController).GetTypeInfo(); var context = new ApplicationModelProviderContext(new[] { typeInfo }); @@ -215,7 +219,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal var detailsProvider = new BindingSourceMetadataProvider(typeof(Guid), BindingSource.Special); var modelMetadataProvider = TestModelMetadataProvider.CreateDefaultProvider(new[] { detailsProvider }); - var provider = new TestApplicationModelProvider(Options.Create(options), modelMetadataProvider); + var provider = new TestApplicationModelProvider(options, modelMetadataProvider); var typeInfo = typeof(ModelBinderController).GetTypeInfo(); var context = new ApplicationModelProviderContext(new[] { typeInfo }); @@ -243,7 +247,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal var detailsProvider = new BindingSourceMetadataProvider(typeof(Guid), BindingSource.Special); var modelMetadataProvider = TestModelMetadataProvider.CreateDefaultProvider(new[] { detailsProvider }); - var provider = new TestApplicationModelProvider(Options.Create(options), modelMetadataProvider); + var provider = new TestApplicationModelProvider(options, modelMetadataProvider); var typeInfo = typeof(ModelBinderController).GetTypeInfo(); var context = new ApplicationModelProviderContext(new[] { typeInfo }); @@ -1658,14 +1662,16 @@ namespace Microsoft.AspNetCore.Mvc.Internal private class TestApplicationModelProvider : DefaultApplicationModelProvider { public TestApplicationModelProvider() - : this(Options.Create(new MvcOptions { AllowValidatingTopLevelNodes = true }), TestModelMetadataProvider.CreateDefaultProvider()) + : this( + new MvcOptions { AllowValidatingTopLevelNodes = true }, + new EmptyModelMetadataProvider()) { } public TestApplicationModelProvider( - IOptions options, + MvcOptions options, IModelMetadataProvider modelMetadataProvider) - : base(options, modelMetadataProvider) + : base(Options.Create(options), modelMetadataProvider) { } diff --git a/test/Microsoft.AspNetCore.Mvc.Cors.Test/Internal/CorsApplicationModelProviderTest.cs b/test/Microsoft.AspNetCore.Mvc.Cors.Test/Internal/CorsApplicationModelProviderTest.cs index 3b9ab90213..3b4c88964f 100644 --- a/test/Microsoft.AspNetCore.Mvc.Cors.Test/Internal/CorsApplicationModelProviderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Cors.Test/Internal/CorsApplicationModelProviderTest.cs @@ -213,7 +213,7 @@ namespace Microsoft.AspNetCore.Mvc.Cors.Internal var context = new ApplicationModelProviderContext(new[] { controllerType.GetTypeInfo() }); var provider = new DefaultApplicationModelProvider( Options.Create(new MvcOptions()), - TestModelMetadataProvider.CreateDefaultProvider()); + new EmptyModelMetadataProvider()); provider.OnProvidersExecuting(context); return context; diff --git a/test/Microsoft.AspNetCore.Mvc.TestCommon/TestModelMetadataProvider.cs b/test/Microsoft.AspNetCore.Mvc.TestCommon/TestModelMetadataProvider.cs index 73fe0c4c6b..47f6b7d2ed 100644 --- a/test/Microsoft.AspNetCore.Mvc.TestCommon/TestModelMetadataProvider.cs +++ b/test/Microsoft.AspNetCore.Mvc.TestCommon/TestModelMetadataProvider.cs @@ -29,7 +29,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding new DataMemberRequiredBindingMetadataProvider(), }; - MvcCoreMvcOptionsSetup.ConfigureAdditionalModelMetadataDetailsProvider(detailsProviders); + MvcCoreMvcOptionsSetup.ConfigureAdditionalModelMetadataDetailsProviders(detailsProviders); var compositeDetailsProvider = new DefaultCompositeMetadataDetailsProvider(detailsProviders); return new DefaultModelMetadataProvider(compositeDetailsProvider, Options.Create(new MvcOptions())); @@ -47,7 +47,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding new DataMemberRequiredBindingMetadataProvider(), }; - MvcCoreMvcOptionsSetup.ConfigureAdditionalModelMetadataDetailsProvider(detailsProviders); + MvcCoreMvcOptionsSetup.ConfigureAdditionalModelMetadataDetailsProviders(detailsProviders); detailsProviders.AddRange(providers); diff --git a/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Internal/TempDataApplicationModelProviderTest.cs b/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Internal/TempDataApplicationModelProviderTest.cs index fb6ec71dc1..ab6df27ee5 100644 --- a/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Internal/TempDataApplicationModelProviderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Internal/TempDataApplicationModelProviderTest.cs @@ -21,12 +21,8 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal var type = typeof(TestController_NoTempDataProperties); var options = Options.Create(new MvcViewOptions()); var provider = new TempDataApplicationModelProvider(options); - var defaultProvider = new DefaultApplicationModelProvider( - Options.Create(new MvcOptions()), - TestModelMetadataProvider.CreateDefaultProvider()); - var context = new ApplicationModelProviderContext(new[] { type.GetTypeInfo() }); - defaultProvider.OnProvidersExecuting(context); + var context = GetContext(type); // Act provider.OnProvidersExecuting(context); @@ -44,12 +40,8 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal var options = Options.Create(new MvcViewOptions()); var provider = new TempDataApplicationModelProvider(options); var expected = $"The '{type.FullName}.Test' property with TempDataAttribute is invalid. A property using TempDataAttribute must have a public getter and setter."; - var defaultProvider = new DefaultApplicationModelProvider( - Options.Create(new MvcOptions()), - TestModelMetadataProvider.CreateDefaultProvider()); - var context = new ApplicationModelProviderContext(new[] { type.GetTypeInfo() }); - defaultProvider.OnProvidersExecuting(context); + var context = GetContext(type); // Act & Assert var ex = Assert.Throws(() => provider.OnProvidersExecuting(context)); @@ -63,12 +55,8 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal var type = typeof(TestController_NullableNonPrimitiveTempDataProperty); var options = Options.Create(new MvcViewOptions()); var provider = new TempDataApplicationModelProvider(options); - var defaultProvider = new DefaultApplicationModelProvider( - Options.Create(new MvcOptions()), - TestModelMetadataProvider.CreateDefaultProvider()); - var context = new ApplicationModelProviderContext(new[] { type.GetTypeInfo() }); - defaultProvider.OnProvidersExecuting(context); + var context = GetContext(type); // Act provider.OnProvidersExecuting(context); @@ -82,15 +70,12 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal public void InitializeFilterFactory_WithExpectedPropertyHelpers_ForTempDataAttributeProperties() { // Arrange - var expected = typeof(TestController_OneTempDataProperty).GetProperty(nameof(TestController_OneTempDataProperty.Test2)); + var type = typeof(TestController_OneTempDataProperty); + var expected = type.GetProperty(nameof(TestController_OneTempDataProperty.Test2)); var options = Options.Create(new MvcViewOptions()); var provider = new TempDataApplicationModelProvider(options); - var defaultProvider = new DefaultApplicationModelProvider( - Options.Create(new MvcOptions()), - TestModelMetadataProvider.CreateDefaultProvider()); - var context = new ApplicationModelProviderContext(new[] { typeof(TestController_OneTempDataProperty).GetTypeInfo() }); - defaultProvider.OnProvidersExecuting(context); + var context = GetContext(type); // Act provider.OnProvidersExecuting(context); @@ -110,13 +95,9 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal // Arrange var expected = typeof(TestController_OneTempDataProperty).GetProperty(nameof(TestController_OneTempDataProperty.Test2)); var options = Options.Create(new MvcViewOptions { SuppressTempDataAttributePrefix = true }); + var type = typeof(TestController_OneTempDataProperty); var provider = new TempDataApplicationModelProvider(options); - var defaultProvider = new DefaultApplicationModelProvider( - Options.Create(new MvcOptions()), - TestModelMetadataProvider.CreateDefaultProvider()); - - var context = new ApplicationModelProviderContext(new[] { typeof(TestController_OneTempDataProperty).GetTypeInfo() }); - defaultProvider.OnProvidersExecuting(context); + var context = GetContext(type); // Act provider.OnProvidersExecuting(context); @@ -130,6 +111,17 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal Assert.Equal("Test2", property.Key); } + private static ApplicationModelProviderContext GetContext(Type type) + { + var defaultProvider = new DefaultApplicationModelProvider( + Options.Create(new MvcOptions()), + new EmptyModelMetadataProvider()); + + var context = new ApplicationModelProviderContext(new[] { type.GetTypeInfo() }); + defaultProvider.OnProvidersExecuting(context); + return context; + } + public class TestController_NoTempDataProperties { public DateTime? DateTime { get; set; }