From 61f218c8e4bb0a9d29c151ec986eebd010406040 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Fri, 17 Oct 2014 18:31:09 -0700 Subject: [PATCH] Renaming IBinderMarker and friends to some more descriptive names. --- .../ApplicationModel/ParameterModel.cs | 4 +- .../ControllerActionArgumentBinder.cs | 4 +- .../ControllerActionDescriptorProvider.cs | 4 +- .../ModelBinders/BodyModelBinder.cs | 8 ++- .../ParameterDescriptor.cs | 4 +- .../BinderMarkers/IRouteDataMarker.cs | 13 ---- .../BinderMarkers/IValueBinderMarker.cs | 12 ---- .../FromBodyAttribute.cs | 2 +- .../FromFormAttribute.cs | 2 +- .../FromQueryAttribute.cs | 2 +- .../FromRouteAttribute.cs | 2 +- .../IBinderMetadata.cs} | 7 +-- .../IFormDataValueProviderMetadata.cs} | 5 +- .../IFormatterBinderMetadata.cs} | 5 +- .../IQueryValueProviderMetadata.cs | 12 ++++ .../IRouteDataValueProviderMetadata.cs | 12 ++++ .../IValueProviderMetadata.cs} | 6 +- .../Binders/CompositeModelBinder.cs | 8 +-- ...AwareBinder.cs => IMetadataAwareBinder.cs} | 4 +- ...rAwareBinder.cs => MetadataAwareBinder.cs} | 20 +++--- .../Metadata/AssociatedMetadataProvider.cs | 17 ++--- .../CachedDataAnnotationsModelMetadata.cs | 2 +- .../Metadata/CachedModelMetadata.cs | 2 +- .../Metadata/IModelMetadataProvider.cs | 2 +- .../Metadata/ModelMetadata.cs | 4 +- .../ValueProviders/CompositeValueProvider.cs | 8 +-- .../DictionaryBasedValueProvider.cs | 4 +- .../FormValueProviderFactory.cs | 4 +- ...ider.cs => IMetadataAwareValueProvider.cs} | 10 +-- ...vider.cs => MetadataAwareValueProvider.cs} | 14 ++--- .../QueryStringValueProviderFactory.cs | 4 +- .../ReadableStringCollectionValueProvider.cs | 6 +- .../RouteValueValueProviderFactory.cs | 2 +- ...rameterConventionsGlobalModelConvention.cs | 6 +- .../OverloadActionConstraint.cs | 6 +- .../ParameterBinding/FromUriAttribute.cs | 7 ++- .../ParameterBinding/ModelBinderAttribute.cs | 2 +- .../ApplicationModel/ParameterModelTest.cs | 3 +- .../BodyModelBinderTests.cs | 14 ++--- .../ControllerActionArgumentBinderTests.cs | 12 ++-- .../ModelBindingHelperTest.cs | 6 +- .../ModelBindingTests.cs | 8 +-- .../Binders/MutableObjectModelBinderTest.cs | 2 +- ...ataAnnotationsModelMetadataProviderTest.cs | 10 +-- .../Utils/SimpleHttpValueProvider.cs | 6 -- .../CompositeValueProviderTests.cs | 32 +++++----- .../DictionaryBasedValueProviderTests.cs | 36 +++++------ .../FormValueProviderFactoryTests.cs | 2 +- .../QueryStringValueProviderFactoryTest.cs | 6 +- ...dableStringCollectionValueProviderTests.cs | 42 ++++++------- .../ApiControllerActionDiscoveryTest.cs | 8 +-- .../OverloadActionConstraintTest.cs | 62 ++++++++++--------- .../WithBinderMetadataController.cs | 29 +++++++++ .../Controllers/WithMarkerController.cs | 31 ---------- ....cs => WithoutBinderMetadataController.cs} | 2 +- ...arker.cs => EmployeeWithBinderMetadata.cs} | 4 +- .../CustomValueProviderFactory.cs | 5 -- 57 files changed, 277 insertions(+), 279 deletions(-) delete mode 100644 src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IRouteDataMarker.cs delete mode 100644 src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IValueBinderMarker.cs rename src/Microsoft.AspNet.Mvc.ModelBinding/{BinderMarkers => BinderMetadata}/FromBodyAttribute.cs (88%) rename src/Microsoft.AspNet.Mvc.ModelBinding/{BinderMarkers => BinderMetadata}/FromFormAttribute.cs (87%) rename src/Microsoft.AspNet.Mvc.ModelBinding/{BinderMarkers => BinderMetadata}/FromQueryAttribute.cs (87%) rename src/Microsoft.AspNet.Mvc.ModelBinding/{BinderMarkers => BinderMetadata}/FromRouteAttribute.cs (87%) rename src/Microsoft.AspNet.Mvc.ModelBinding/{BinderMarkers/IBodyBinderMarker.cs => BinderMetadata/IBinderMetadata.cs} (64%) rename src/Microsoft.AspNet.Mvc.ModelBinding/{BinderMarkers/IQueryBinderMarker.cs => BinderMetadata/IFormDataValueProviderMetadata.cs} (61%) rename src/Microsoft.AspNet.Mvc.ModelBinding/{BinderMarkers/IFormDataMarker.cs => BinderMetadata/IFormatterBinderMetadata.cs} (63%) create mode 100644 src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IQueryValueProviderMetadata.cs create mode 100644 src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IRouteDataValueProviderMetadata.cs rename src/Microsoft.AspNet.Mvc.ModelBinding/{BinderMarkers/IBinderMarker.cs => BinderMetadata/IValueProviderMetadata.cs} (67%) rename src/Microsoft.AspNet.Mvc.ModelBinding/Binders/{IMarkerAwareBinder.cs => IMetadataAwareBinder.cs} (81%) rename src/Microsoft.AspNet.Mvc.ModelBinding/Binders/{MarkerAwareBinder.cs => MetadataAwareBinder.cs} (53%) rename src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/{IMarkerAwareValueProvider.cs => IMetadataAwareValueProvider.cs} (55%) rename src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/{MarkerAwareValueProvider.cs => MetadataAwareValueProvider.cs} (50%) create mode 100644 test/WebSites/ModelBindingWebSite/Controllers/WithBinderMetadataController.cs delete mode 100644 test/WebSites/ModelBindingWebSite/Controllers/WithMarkerController.cs rename test/WebSites/ModelBindingWebSite/Controllers/{WithoutMarkerController.cs => WithoutBinderMetadataController.cs} (91%) rename test/WebSites/ModelBindingWebSite/Model/{EmployeeWithMarker.cs => EmployeeWithBinderMetadata.cs} (72%) diff --git a/src/Microsoft.AspNet.Mvc.Core/ApplicationModel/ParameterModel.cs b/src/Microsoft.AspNet.Mvc.Core/ApplicationModel/ParameterModel.cs index 9306201d69..d9c7a81f06 100644 --- a/src/Microsoft.AspNet.Mvc.Core/ApplicationModel/ParameterModel.cs +++ b/src/Microsoft.AspNet.Mvc.Core/ApplicationModel/ParameterModel.cs @@ -20,7 +20,7 @@ namespace Microsoft.AspNet.Mvc.ApplicationModel { Action = other.Action; Attributes = new List(other.Attributes); - BinderMarker = other.BinderMarker; + BinderMetadata = other.BinderMetadata; IsOptional = other.IsOptional; ParameterInfo = other.ParameterInfo; ParameterName = other.ParameterName; @@ -30,7 +30,7 @@ namespace Microsoft.AspNet.Mvc.ApplicationModel public List Attributes { get; private set; } - public IBinderMarker BinderMarker { get; set; } + public IBinderMetadata BinderMetadata { get; set; } public bool IsOptional { get; set; } diff --git a/src/Microsoft.AspNet.Mvc.Core/ControllerActionArgumentBinder.cs b/src/Microsoft.AspNet.Mvc.Core/ControllerActionArgumentBinder.cs index da63241c4f..63a31c4c1b 100644 --- a/src/Microsoft.AspNet.Mvc.Core/ControllerActionArgumentBinder.cs +++ b/src/Microsoft.AspNet.Mvc.Core/ControllerActionArgumentBinder.cs @@ -44,7 +44,7 @@ namespace Microsoft.AspNet.Mvc modelAccessor: null, methodInfo: actionDescriptor.MethodInfo, parameterName: parameter.Name, - binderMarker: parameter.BinderMarker); + binderMetadata: parameter.BinderMetadata); if (metadata != null) { @@ -53,7 +53,7 @@ namespace Microsoft.AspNet.Mvc } var bodyBoundParameterCount = parameterMetadata.Count( - modelMetadata => modelMetadata.Marker is IBodyBinderMarker); + modelMetadata => modelMetadata.BinderMetadata is IFormatterBinderMetadata); if (bodyBoundParameterCount > 1) { throw new InvalidOperationException(Resources.MultipleBodyParametersAreNotAllowed); diff --git a/src/Microsoft.AspNet.Mvc.Core/ControllerActionDescriptorProvider.cs b/src/Microsoft.AspNet.Mvc.Core/ControllerActionDescriptorProvider.cs index aac2307003..103c726959 100644 --- a/src/Microsoft.AspNet.Mvc.Core/ControllerActionDescriptorProvider.cs +++ b/src/Microsoft.AspNet.Mvc.Core/ControllerActionDescriptorProvider.cs @@ -191,7 +191,7 @@ namespace Microsoft.AspNet.Mvc var attributes = parameterInfo.GetCustomAttributes(inherit: true).OfType().ToList(); parameterModel.Attributes.AddRange(attributes); - parameterModel.BinderMarker = attributes.OfType().FirstOrDefault(); + parameterModel.BinderMetadata = attributes.OfType().FirstOrDefault(); parameterModel.ParameterName = parameterInfo.Name; parameterModel.IsOptional = parameterInfo.HasDefaultValue; @@ -510,7 +510,7 @@ namespace Microsoft.AspNet.Mvc { var parameterDescriptor = new ParameterDescriptor() { - BinderMarker = parameter.BinderMarker, + BinderMetadata = parameter.BinderMetadata, IsOptional = parameter.IsOptional, Name = parameter.ParameterName, }; diff --git a/src/Microsoft.AspNet.Mvc.Core/ModelBinders/BodyModelBinder.cs b/src/Microsoft.AspNet.Mvc.Core/ModelBinders/BodyModelBinder.cs index 374ca38220..b971bc3c40 100644 --- a/src/Microsoft.AspNet.Mvc.Core/ModelBinders/BodyModelBinder.cs +++ b/src/Microsoft.AspNet.Mvc.Core/ModelBinders/BodyModelBinder.cs @@ -13,10 +13,10 @@ using Microsoft.Framework.OptionsModel; namespace Microsoft.AspNet.Mvc { /// - /// Represents a model binder which understands and uses + /// Represents a model binder which understands and uses /// InputFomatters to bind the model to request's body. /// - public class BodyModelBinder : MarkerAwareBinder + public class BodyModelBinder : MetadataAwareBinder { private readonly ActionContext _actionContext; private readonly IInputFormatterSelector _formatterSelector; @@ -34,7 +34,9 @@ namespace Microsoft.AspNet.Mvc _mvcOptions = mvcOptions; } - protected override async Task BindAsync(ModelBindingContext bindingContext, IBodyBinderMarker marker) + protected override async Task BindAsync( + ModelBindingContext bindingContext, + IFormatterBinderMetadata metadata) { var formatterContext = new InputFormatterContext(_actionContext, bindingContext.ModelType); var formatter = _formatterSelector.SelectFormatter(formatterContext); diff --git a/src/Microsoft.AspNet.Mvc.Core/ParameterDescriptor.cs b/src/Microsoft.AspNet.Mvc.Core/ParameterDescriptor.cs index 434ddd0758..8e2f8c8bf7 100644 --- a/src/Microsoft.AspNet.Mvc.Core/ParameterDescriptor.cs +++ b/src/Microsoft.AspNet.Mvc.Core/ParameterDescriptor.cs @@ -2,7 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Reflection; +using System.Collections.Generic; using Microsoft.AspNet.Mvc.ModelBinding; namespace Microsoft.AspNet.Mvc @@ -17,7 +17,7 @@ namespace Microsoft.AspNet.Mvc public ParameterBindingInfo ParameterBindingInfo { get; set; } - public IBinderMarker BinderMarker { get; set; } + public IBinderMetadata BinderMetadata { get; set; } public BodyParameterInfo BodyParameterInfo { get; set; } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IRouteDataMarker.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IRouteDataMarker.cs deleted file mode 100644 index a0784c2ab7..0000000000 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IRouteDataMarker.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - - -namespace Microsoft.AspNet.Mvc.ModelBinding -{ - /// - /// Represents a marker used to identify a binder which can bind route data to a model. - /// - public interface IRouteDataMarker : IValueBinderMarker - { - } -} diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IValueBinderMarker.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IValueBinderMarker.cs deleted file mode 100644 index 0f65cb1bca..0000000000 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IValueBinderMarker.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Microsoft.AspNet.Mvc.ModelBinding -{ - /// - /// Represents a binder marker which identifies a binder which is based on a value provider. - /// - public interface IValueBinderMarker : IBinderMarker - { - } -} diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/FromBodyAttribute.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/FromBodyAttribute.cs similarity index 88% rename from src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/FromBodyAttribute.cs rename to src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/FromBodyAttribute.cs index da41941d13..59f073975f 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/FromBodyAttribute.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/FromBodyAttribute.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNet.Mvc /// they are bound from the body of the incoming request. /// [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] - public class FromBodyAttribute : Attribute, IBodyBinderMarker + public class FromBodyAttribute : Attribute, IFormatterBinderMetadata { } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/FromFormAttribute.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/FromFormAttribute.cs similarity index 87% rename from src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/FromFormAttribute.cs rename to src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/FromFormAttribute.cs index ea3673945e..75c26f43ba 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/FromFormAttribute.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/FromFormAttribute.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNet.Mvc /// they will be bound using form data of the incoming request. /// [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] - public class FromFormAttribute : Attribute, IFormDataMarker + public class FromFormAttribute : Attribute, IFormDataValueProviderMetadata { } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/FromQueryAttribute.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/FromQueryAttribute.cs similarity index 87% rename from src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/FromQueryAttribute.cs rename to src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/FromQueryAttribute.cs index 5509419dd7..dce4d4c54b 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/FromQueryAttribute.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/FromQueryAttribute.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNet.Mvc /// they will be bound using query data of the incoming request. /// [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] - public class FromQueryAttribute : Attribute, IQueryBinderMarker + public class FromQueryAttribute : Attribute, IQueryValueProviderMetadata { } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/FromRouteAttribute.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/FromRouteAttribute.cs similarity index 87% rename from src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/FromRouteAttribute.cs rename to src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/FromRouteAttribute.cs index c4d5fc4da2..eb0dec2132 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/FromRouteAttribute.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/FromRouteAttribute.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNet.Mvc /// they will be bound using route data of the incoming request. /// [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] - public class FromRouteAttribute : Attribute, IRouteDataMarker + public class FromRouteAttribute : Attribute, IRouteDataValueProviderMetadata { } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IBodyBinderMarker.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IBinderMetadata.cs similarity index 64% rename from src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IBodyBinderMarker.cs rename to src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IBinderMetadata.cs index 5ade36c809..0f88e1ba2a 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IBodyBinderMarker.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IBinderMetadata.cs @@ -1,13 +1,12 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - namespace Microsoft.AspNet.Mvc.ModelBinding { /// - /// Represents a marker used to identify a binder which can bind request body to a model. + /// Interface for metadata related to model binders. /// - public interface IBodyBinderMarker : IBinderMarker + public interface IBinderMetadata { } -} +} \ No newline at end of file diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IQueryBinderMarker.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IFormDataValueProviderMetadata.cs similarity index 61% rename from src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IQueryBinderMarker.cs rename to src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IFormDataValueProviderMetadata.cs index 712311ffaf..f4ee5cbde7 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IQueryBinderMarker.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IFormDataValueProviderMetadata.cs @@ -1,13 +1,12 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - namespace Microsoft.AspNet.Mvc.ModelBinding { /// - /// Represents a marker used to identify a binder which can bind query data to a model. + /// Metadata interface that indicates model binding should use only form data value providers. /// - public interface IQueryBinderMarker : IValueBinderMarker + public interface IFormDataValueProviderMetadata : IValueProviderMetadata { } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IFormDataMarker.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IFormatterBinderMetadata.cs similarity index 63% rename from src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IFormDataMarker.cs rename to src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IFormatterBinderMetadata.cs index 7ee357c3ea..3a5c8399ca 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IFormDataMarker.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IFormatterBinderMetadata.cs @@ -1,13 +1,12 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - namespace Microsoft.AspNet.Mvc.ModelBinding { /// - /// Represents a marker used to identify a binder which can bind form data to a model. + /// Metadata interface that indicates model binding should be performed by an input formatter. /// - public interface IFormDataMarker : IValueBinderMarker + public interface IFormatterBinderMetadata : IBinderMetadata { } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IQueryValueProviderMetadata.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IQueryValueProviderMetadata.cs new file mode 100644 index 0000000000..7e81a950f6 --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IQueryValueProviderMetadata.cs @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.AspNet.Mvc.ModelBinding +{ + /// + /// Metadata interface that indicates model binding should use only query string value providers. + /// + public interface IQueryValueProviderMetadata : IValueProviderMetadata + { + } +} diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IRouteDataValueProviderMetadata.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IRouteDataValueProviderMetadata.cs new file mode 100644 index 0000000000..2ee89fcb17 --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IRouteDataValueProviderMetadata.cs @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.AspNet.Mvc.ModelBinding +{ + /// + /// Metadata interface that indicates model binding should use only route data value providers. + /// + public interface IRouteDataValueProviderMetadata : IValueProviderMetadata + { + } +} diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IBinderMarker.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IValueProviderMetadata.cs similarity index 67% rename from src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IBinderMarker.cs rename to src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IValueProviderMetadata.cs index 568e9c7685..825387df99 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMarkers/IBinderMarker.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/BinderMetadata/IValueProviderMetadata.cs @@ -1,14 +1,12 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; - namespace Microsoft.AspNet.Mvc.ModelBinding { /// - /// Represents a marker used to identify a particular binder applies to a model. + /// Interface for metadata related to value providers. /// - public interface IBinderMarker + public interface IValueProviderMetadata : IBinderMetadata { } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/Binders/CompositeModelBinder.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/Binders/CompositeModelBinder.cs index 4fa1621039..ba354e6dd7 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/Binders/CompositeModelBinder.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/Binders/CompositeModelBinder.cs @@ -145,13 +145,13 @@ namespace Microsoft.AspNet.Mvc.ModelBinding } // look at the value providers and see if they need to be restricted. - var marker = oldBindingContext.ModelMetadata.Marker as IValueBinderMarker; - if (marker != null) + var metadata = oldBindingContext.ModelMetadata.BinderMetadata as IValueProviderMetadata; + if (metadata != null) { - var valueProvider = oldBindingContext.ValueProvider as IMarkerAwareValueProvider; + var valueProvider = oldBindingContext.ValueProvider as IMetadataAwareValueProvider; if (valueProvider != null) { - newBindingContext.ValueProvider = valueProvider.Filter(marker); + newBindingContext.ValueProvider = valueProvider.Filter(metadata); } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/Binders/IMarkerAwareBinder.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/Binders/IMetadataAwareBinder.cs similarity index 81% rename from src/Microsoft.AspNet.Mvc.ModelBinding/Binders/IMarkerAwareBinder.cs rename to src/Microsoft.AspNet.Mvc.ModelBinding/Binders/IMetadataAwareBinder.cs index b0b67a86bc..15005ff4f8 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/Binders/IMarkerAwareBinder.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/Binders/IMetadataAwareBinder.cs @@ -4,9 +4,9 @@ namespace Microsoft.AspNet.Mvc.ModelBinding { /// - /// An which is aware of . + /// An which is aware of . /// - public interface IMarkerAwareBinder : IModelBinder + public interface IMetadataAwareBinder : IModelBinder { } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/Binders/MarkerAwareBinder.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/Binders/MetadataAwareBinder.cs similarity index 53% rename from src/Microsoft.AspNet.Mvc.ModelBinding/Binders/MarkerAwareBinder.cs rename to src/Microsoft.AspNet.Mvc.ModelBinding/Binders/MetadataAwareBinder.cs index dd37f83238..478e9d450f 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/Binders/MarkerAwareBinder.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/Binders/MetadataAwareBinder.cs @@ -6,27 +6,27 @@ using System.Threading.Tasks; namespace Microsoft.AspNet.Mvc.ModelBinding { /// - /// Represents an which can select itself based on the - /// . + /// Represents an which can select itself based on the + /// . /// - /// Represents a type implementing - public abstract class MarkerAwareBinder : IMarkerAwareBinder - where TBinderMarker : IBinderMarker + /// Represents a type implementing + public abstract class MetadataAwareBinder : IMetadataAwareBinder + where TBinderMetadata : IBinderMetadata { /// /// Async function which does the actual binding to bind to a particular model. /// /// The binding context which has the object to be bound. - /// The associated with the current binder. + /// The associated with the current binder. /// A Task with a bool implying the success or failure of the operation. - protected abstract Task BindAsync(ModelBindingContext bindingContext, TBinderMarker marker); + protected abstract Task BindAsync(ModelBindingContext bindingContext, TBinderMetadata metadata); public Task BindModelAsync(ModelBindingContext context) { - if (context.ModelMetadata.Marker is TBinderMarker) + if (context.ModelMetadata.BinderMetadata is TBinderMetadata) { - var marker = (TBinderMarker)context.ModelMetadata.Marker; - return BindAsync(context, marker); + var metadata = (TBinderMetadata)context.ModelMetadata.BinderMetadata; + return BindAsync(context, metadata); } return Task.FromResult(false); diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/AssociatedMetadataProvider.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/AssociatedMetadataProvider.cs index 590bfe279f..1f7a45cf0a 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/AssociatedMetadataProvider.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/AssociatedMetadataProvider.cs @@ -50,7 +50,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding Func modelAccessor, [NotNull] MethodInfo methodInfo, [NotNull] string parameterName, - IBinderMarker binderMarker) + IBinderMetadata binderMetadata) { var parameter = methodInfo.GetParameters().FirstOrDefault( param => StringComparer.Ordinal.Equals(param.Name, parameterName)); @@ -60,7 +60,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding throw new ArgumentException(message, nameof(parameterName)); } - return GetMetadataForParameterCore(modelAccessor, parameterName, parameter, binderMarker); + return GetMetadataForParameterCore(modelAccessor, parameterName, parameter, binderMetadata); } // Override for creating the prototype metadata (without the accessor) @@ -75,13 +75,14 @@ namespace Microsoft.AspNet.Mvc.ModelBinding private ModelMetadata GetMetadataForParameterCore(Func modelAccessor, string parameterName, ParameterInfo parameter, - IBinderMarker binderMarker) + IBinderMetadata binderMetadata) { var parameterInfo = CreateParameterInfo(parameter.ParameterType, parameter.GetCustomAttributes(), parameterName, - binderMarker); + binderMetadata); + return CreateMetadataFromPrototype(parameterInfo.Prototype, modelAccessor); } @@ -172,19 +173,19 @@ namespace Microsoft.AspNet.Mvc.ModelBinding Type parameterType, IEnumerable attributes, string parameterName, - IBinderMarker binderMarker) + IBinderMetadata binderMetadata) { var metadataProtoType = CreateMetadataPrototype(attributes: attributes, containerType: null, modelType: parameterType, propertyName: parameterName); - if (binderMarker != null) + if (binderMetadata != null) { - metadataProtoType.Marker = binderMarker; + metadataProtoType.BinderMetadata = binderMetadata; } - var nameProvider = binderMarker as IModelNameProvider; + var nameProvider = binderMetadata as IModelNameProvider; if (nameProvider != null && nameProvider.Name != null) { metadataProtoType.ModelName = nameProvider.Name; diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedDataAnnotationsModelMetadata.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedDataAnnotationsModelMetadata.cs index 4e6c422b82..b5d292cf05 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedDataAnnotationsModelMetadata.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedDataAnnotationsModelMetadata.cs @@ -33,7 +33,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding propertyName, new CachedDataAnnotationsMetadataAttributes(attributes)) { - Marker = attributes.OfType().FirstOrDefault(); + BinderMetadata = attributes.OfType().FirstOrDefault(); var modelNameProvider = attributes.OfType().FirstOrDefault(); ModelName = modelNameProvider?.Name; diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedModelMetadata.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedModelMetadata.cs index 910d2bcdcc..130c6bf53c 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedModelMetadata.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedModelMetadata.cs @@ -55,7 +55,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding { CacheKey = prototype.CacheKey; PrototypeCache = prototype.PrototypeCache; - Marker = prototype.Marker; + BinderMetadata = prototype.BinderMetadata; IncludedProperties = prototype.IncludedProperties; ExcludedProperties = prototype.ExcludedProperties; ModelName = prototype.ModelName; diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/IModelMetadataProvider.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/IModelMetadataProvider.cs index a62d885b15..73f35ff87a 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/IModelMetadataProvider.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/IModelMetadataProvider.cs @@ -19,6 +19,6 @@ namespace Microsoft.AspNet.Mvc.ModelBinding Func modelAccessor, [NotNull] MethodInfo methodInfo, [NotNull] string parameterName, - IBinderMarker binderMarker); + IBinderMetadata binderMetadata); } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/ModelMetadata.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/ModelMetadata.cs index abdebfe3b5..39c54f0b0e 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/ModelMetadata.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/ModelMetadata.cs @@ -63,9 +63,9 @@ namespace Microsoft.AspNet.Mvc.ModelBinding public IReadOnlyList ExcludedProperties { get; set; } /// - /// Gets or sets a binder marker for this model. + /// Gets or sets a binder metadata for this model. /// - public IBinderMarker Marker { get; set; } + public IBinderMetadata BinderMetadata { get; set; } public Type ContainerType { diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/CompositeValueProvider.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/CompositeValueProvider.cs index a7f925c75f..375d30a69f 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/CompositeValueProvider.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/CompositeValueProvider.cs @@ -9,7 +9,7 @@ using System.Threading.Tasks; namespace Microsoft.AspNet.Mvc.ModelBinding { - public class CompositeValueProvider : Collection, IEnumerableValueProvider, IMarkerAwareValueProvider + public class CompositeValueProvider : Collection, IEnumerableValueProvider, IMetadataAwareValueProvider { public CompositeValueProvider() : base() @@ -80,12 +80,12 @@ namespace Microsoft.AspNet.Mvc.ModelBinding base.SetItem(index, item); } - public IValueProvider Filter(IValueBinderMarker valueBinderMarker) + public IValueProvider Filter(IValueProviderMetadata valueBinderMetadata) { var filteredValueProviders = new List(); - foreach (var valueProvider in this.OfType()) + foreach (var valueProvider in this.OfType()) { - var result = valueProvider.Filter(valueBinderMarker); + var result = valueProvider.Filter(valueBinderMetadata); if (result != null) { filteredValueProviders.Add(result); diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/DictionaryBasedValueProvider.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/DictionaryBasedValueProvider.cs index 1dedf508ce..5063fd9059 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/DictionaryBasedValueProvider.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/DictionaryBasedValueProvider.cs @@ -8,8 +8,8 @@ using Microsoft.AspNet.Mvc.ModelBinding.Internal; namespace Microsoft.AspNet.Mvc.ModelBinding { - public class DictionaryBasedValueProvider : MarkerAwareValueProvider - where TBinderMarker : IValueBinderMarker + public class DictionaryBasedValueProvider : MetadataAwareValueProvider + where TBinderMetadata : IValueProviderMetadata { private readonly IDictionary _values; private PrefixContainer _prefixContainer; diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/FormValueProviderFactory.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/FormValueProviderFactory.cs index b3237f6469..9865b77819 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/FormValueProviderFactory.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/FormValueProviderFactory.cs @@ -20,7 +20,9 @@ namespace Microsoft.AspNet.Mvc.ModelBinding if (IsSupportedContentType(request)) { var culture = GetCultureInfo(request); - return new ReadableStringCollectionValueProvider(() => request.GetFormAsync(), culture); + return new ReadableStringCollectionValueProvider( + () => request.GetFormAsync(), + culture); } return null; diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/IMarkerAwareValueProvider.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/IMetadataAwareValueProvider.cs similarity index 55% rename from src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/IMarkerAwareValueProvider.cs rename to src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/IMetadataAwareValueProvider.cs index ec1850dd3c..bb3832d0e5 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/IMarkerAwareValueProvider.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/IMetadataAwareValueProvider.cs @@ -4,15 +4,15 @@ namespace Microsoft.AspNet.Mvc.ModelBinding { /// - /// A value provider which is aware of . + /// A value provider which is aware of . /// - public interface IMarkerAwareValueProvider : IValueProvider + public interface IMetadataAwareValueProvider : IValueProvider { /// - /// Filters the value provider based on . + /// Filters the value provider based on . /// - /// The associated with a model. + /// The associated with a model. /// The filtered value provider. - IValueProvider Filter([NotNull] IValueBinderMarker valueBinderMarker); + IValueProvider Filter([NotNull] IValueProviderMetadata metadata); } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/MarkerAwareValueProvider.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/MetadataAwareValueProvider.cs similarity index 50% rename from src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/MarkerAwareValueProvider.cs rename to src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/MetadataAwareValueProvider.cs index 043608ab86..e0d27c1e90 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/MarkerAwareValueProvider.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/MetadataAwareValueProvider.cs @@ -7,20 +7,20 @@ using System.Threading.Tasks; namespace Microsoft.AspNet.Mvc.ModelBinding { /// - /// A value provider which can filter - /// based on . + /// A value provider which can filter + /// based on . /// - /// Represents a type implementing - public abstract class MarkerAwareValueProvider : IMarkerAwareValueProvider - where TBinderMarker : IValueBinderMarker + /// Represents a type implementing + public abstract class MetadataAwareValueProvider : IMetadataAwareValueProvider + where TBinderMetadata : IValueProviderMetadata { public abstract Task ContainsPrefixAsync(string prefix); public abstract Task GetValueAsync(string key); - public virtual IValueProvider Filter(IValueBinderMarker valueBinderMarker) + public virtual IValueProvider Filter(IValueProviderMetadata valueBinderMetadata) { - if (valueBinderMarker is TBinderMarker) + if (valueBinderMetadata is TBinderMetadata) { return this; } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/QueryStringValueProviderFactory.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/QueryStringValueProviderFactory.cs index b9f75f297b..a33792bad3 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/QueryStringValueProviderFactory.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/QueryStringValueProviderFactory.cs @@ -18,13 +18,13 @@ namespace Microsoft.AspNet.Mvc.ModelBinding if (!storage.TryGetValue(_cacheKey, out value)) { var queryCollection = context.HttpContext.Request.Query; - provider = new ReadableStringCollectionValueProvider(queryCollection, + provider = new ReadableStringCollectionValueProvider(queryCollection, CultureInfo.InvariantCulture); storage[_cacheKey] = provider; } else { - provider = (ReadableStringCollectionValueProvider)value; + provider = (ReadableStringCollectionValueProvider)value; } return provider; } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/ReadableStringCollectionValueProvider.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/ReadableStringCollectionValueProvider.cs index 7ca83309ca..18dcba91f3 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/ReadableStringCollectionValueProvider.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/ReadableStringCollectionValueProvider.cs @@ -11,9 +11,9 @@ using Microsoft.AspNet.Mvc.ModelBinding.Internal; namespace Microsoft.AspNet.Mvc.ModelBinding { - public class ReadableStringCollectionValueProvider : - MarkerAwareValueProvider, IEnumerableValueProvider - where TBinderMarker : IValueBinderMarker + public class ReadableStringCollectionValueProvider : + MetadataAwareValueProvider, IEnumerableValueProvider + where TBinderMetadata : IValueProviderMetadata { private readonly CultureInfo _culture; private PrefixContainer _prefixContainer; diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/RouteValueValueProviderFactory.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/RouteValueValueProviderFactory.cs index adca3248fa..b70f6551f8 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/RouteValueValueProviderFactory.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/RouteValueValueProviderFactory.cs @@ -7,7 +7,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding { public IValueProvider GetValueProvider([NotNull] ValueProviderFactoryContext context) { - return new DictionaryBasedValueProvider(context.RouteValues); + return new DictionaryBasedValueProvider(context.RouteValues); } } } diff --git a/src/Microsoft.AspNet.Mvc.WebApiCompatShim/Conventions/WebApiParameterConventionsGlobalModelConvention.cs b/src/Microsoft.AspNet.Mvc.WebApiCompatShim/Conventions/WebApiParameterConventionsGlobalModelConvention.cs index aab89c6d85..cb610f5e8f 100644 --- a/src/Microsoft.AspNet.Mvc.WebApiCompatShim/Conventions/WebApiParameterConventionsGlobalModelConvention.cs +++ b/src/Microsoft.AspNet.Mvc.WebApiCompatShim/Conventions/WebApiParameterConventionsGlobalModelConvention.cs @@ -32,19 +32,19 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { foreach (var parameter in action.Parameters) { - if (parameter.BinderMarker != null) + if (parameter.BinderMetadata is IBinderMetadata) { // This has a binding behavior configured, just leave it alone. } else if (ValueProviderResult.CanConvertFromString(parameter.ParameterInfo.ParameterType)) { // Simple types are by-default from the URI. - parameter.BinderMarker = new FromUriAttribute(); + parameter.BinderMetadata = new FromUriAttribute(); } else { // Complex types are by-default from the body. - parameter.BinderMarker = new FromBodyAttribute(); + parameter.BinderMetadata = new FromBodyAttribute(); } } } diff --git a/src/Microsoft.AspNet.Mvc.WebApiCompatShim/OverloadActionConstraint.cs b/src/Microsoft.AspNet.Mvc.WebApiCompatShim/OverloadActionConstraint.cs index 1a91e410f9..daa414dfe3 100644 --- a/src/Microsoft.AspNet.Mvc.WebApiCompatShim/OverloadActionConstraint.cs +++ b/src/Microsoft.AspNet.Mvc.WebApiCompatShim/OverloadActionConstraint.cs @@ -91,11 +91,13 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim foreach (var parameter in candidate.Action.Parameters) { // We only consider parameters that are bound from the URL. - if ((parameter.BinderMarker is IRouteDataMarker || parameter.BinderMarker is IQueryBinderMarker) && + if ((parameter.BinderMetadata is IRouteDataValueProviderMetadata || + parameter.BinderMetadata is IQueryValueProviderMetadata) && !parameter.IsOptional && ValueProviderResult.CanConvertFromString(parameter.ParameterBindingInfo.ParameterType)) { - var prefix = (parameter.BinderMarker as IModelNameProvider).Name ?? parameter.Name; + var nameProvider = parameter.BinderMetadata as IModelNameProvider; + var prefix = nameProvider?.Name ?? parameter.Name; parameters.Add(new OverloadedParameter() { diff --git a/src/Microsoft.AspNet.Mvc.WebApiCompatShim/ParameterBinding/FromUriAttribute.cs b/src/Microsoft.AspNet.Mvc.WebApiCompatShim/ParameterBinding/FromUriAttribute.cs index dac527bea7..521693445f 100644 --- a/src/Microsoft.AspNet.Mvc.WebApiCompatShim/ParameterBinding/FromUriAttribute.cs +++ b/src/Microsoft.AspNet.Mvc.WebApiCompatShim/ParameterBinding/FromUriAttribute.cs @@ -10,8 +10,13 @@ namespace System.Web.Http /// An attribute that specifies that the value can be bound from the query string or route data. /// [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] - public class FromUriAttribute : Attribute, IQueryBinderMarker, IRouteDataMarker, IModelNameProvider + public class FromUriAttribute : + Attribute, + IQueryValueProviderMetadata, + IRouteDataValueProviderMetadata, + IModelNameProvider { + /// public string Name { get; set; } } } \ No newline at end of file diff --git a/src/Microsoft.AspNet.Mvc.WebApiCompatShim/ParameterBinding/ModelBinderAttribute.cs b/src/Microsoft.AspNet.Mvc.WebApiCompatShim/ParameterBinding/ModelBinderAttribute.cs index 02cc4dba01..0b7303369f 100644 --- a/src/Microsoft.AspNet.Mvc.WebApiCompatShim/ParameterBinding/ModelBinderAttribute.cs +++ b/src/Microsoft.AspNet.Mvc.WebApiCompatShim/ParameterBinding/ModelBinderAttribute.cs @@ -9,7 +9,7 @@ namespace System.Web.Http /// An attribute that specifies that the value can be bound by a model binder. /// [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] - public class ModelBinderAttribute : Attribute, IBinderMarker + public class ModelBinderAttribute : Attribute, IBinderMetadata { } } \ No newline at end of file diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/ApplicationModel/ParameterModelTest.cs b/test/Microsoft.AspNet.Mvc.Core.Test/ApplicationModel/ParameterModelTest.cs index 79ed806273..05e496ab74 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/ApplicationModel/ParameterModelTest.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/ApplicationModel/ParameterModelTest.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using Microsoft.AspNet.Mvc.ModelBinding; using Xunit; namespace Microsoft.AspNet.Mvc.ApplicationModel @@ -17,7 +18,7 @@ namespace Microsoft.AspNet.Mvc.ApplicationModel parameter.Action = new ActionModel(typeof(TestController).GetMethod("Edit")); parameter.Attributes.Add(new FromBodyAttribute()); - parameter.BinderMarker = new FromBodyAttribute(); + parameter.BinderMetadata = (IBinderMetadata)parameter.Attributes[0]; parameter.IsOptional = true; parameter.ParameterName = "id"; diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/BodyModelBinderTests.cs b/test/Microsoft.AspNet.Mvc.Core.Test/BodyModelBinderTests.cs index b8ebcfc17a..155b71735f 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/BodyModelBinderTests.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/BodyModelBinderTests.cs @@ -31,7 +31,7 @@ namespace Microsoft.AspNet.Mvc .Verifiable(); var bindingContext = GetBindingContext(typeof(Person), inputFormatter: mockInputFormatter.Object); - bindingContext.ModelMetadata.Marker = Mock.Of(); + bindingContext.ModelMetadata.BinderMetadata = Mock.Of(); var binder = GetBodyBinder(mockInputFormatter.Object, mockValidator.Object, null); @@ -48,7 +48,7 @@ namespace Microsoft.AspNet.Mvc { // Arrange var bindingContext = GetBindingContext(typeof(Person), inputFormatter: null); - bindingContext.ModelMetadata.Marker = Mock.Of(); + bindingContext.ModelMetadata.BinderMetadata = Mock.Of(); var binder = bindingContext.ModelBinder; // Act @@ -56,7 +56,7 @@ namespace Microsoft.AspNet.Mvc // Assert - // Returns true because it understands the marker. + // Returns true because it understands the metadata type. Assert.True(binderResult); Assert.Null(bindingContext.Model); Assert.True(bindingContext.ModelState.ContainsKey("someName")); @@ -65,19 +65,19 @@ namespace Microsoft.AspNet.Mvc [Theory] [InlineData(true)] [InlineData(false)] - public async Task BindModel_IsMarkerAware(bool useBodyMarker) + public async Task BindModel_IsMetadataAware(bool useBody) { // Arrange var bindingContext = GetBindingContext(typeof(Person), inputFormatter: null); - bindingContext.ModelMetadata.Marker = useBodyMarker ? Mock.Of() : - Mock.Of(); + bindingContext.ModelMetadata.BinderMetadata = useBody ? Mock.Of() : + Mock.Of(); var binder = bindingContext.ModelBinder; // Act var binderResult = await binder.BindModelAsync(bindingContext); // Assert - Assert.Equal(useBodyMarker, binderResult); + Assert.Equal(useBody, binderResult); } private static ModelBindingContext GetBindingContext(Type modelType, IInputFormatter inputFormatter) diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/ParameterBinding/ControllerActionArgumentBinderTests.cs b/test/Microsoft.AspNet.Mvc.Core.Test/ParameterBinding/ControllerActionArgumentBinderTests.cs index ffd7926d81..f317876c1e 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/ParameterBinding/ControllerActionArgumentBinderTests.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/ParameterBinding/ControllerActionArgumentBinderTests.cs @@ -60,7 +60,7 @@ namespace Microsoft.AspNet.Mvc.Core.Test var modelMetadata = metadataProvider.GetMetadataForParameter(modelAccessor: null, methodInfo: methodInfo, parameterName: "foo", - binderMarker: null); + binderMetadata: null); var actionBindingContext = new ActionBindingContext(actionContext, @@ -95,7 +95,7 @@ namespace Microsoft.AspNet.Mvc.Core.Test var modelMetadata = metadataProvider.GetMetadataForParameter(modelAccessor: null, methodInfo: methodInfo, parameterName: "foo1", - binderMarker: null); + binderMetadata: null); var actionBindingContext = new ActionBindingContext(actionContext, @@ -266,10 +266,10 @@ namespace Microsoft.AspNet.Mvc.Core.Test { public string UnmarkedProperty { get; set; } - [NonValueBinderMarker] + [NonValueProviderBinderMetadata] public string NonValueBinderMarkedProperty { get; set; } - [ValueBinderMarker] + [ValueProviderMetadata] public string ValueBinderMarkedProperty { get; set; } public Person ActionWithBodyParam([FromBody] Person bodyParam) @@ -284,11 +284,11 @@ namespace Microsoft.AspNet.Mvc.Core.Test } - private class NonValueBinderMarkerAttribute : Attribute, IBinderMarker + private class NonValueProviderBinderMetadataAttribute : Attribute, IBinderMetadata { } - private class ValueBinderMarkerAttribute : Attribute, IValueBinderMarker + private class ValueProviderMetadataAttribute : Attribute, IValueProviderMetadata { } } diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/ParameterBinding/ModelBindingHelperTest.cs b/test/Microsoft.AspNet.Mvc.Core.Test/ParameterBinding/ModelBindingHelperTest.cs index 33c5a68a55..5bebb4b0ac 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/ParameterBinding/ModelBindingHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/ParameterBinding/ModelBindingHelperTest.cs @@ -67,7 +67,7 @@ namespace Microsoft.AspNet.Mvc.Core.Test { { "", null } }; - var valueProvider = new DictionaryBasedValueProvider(values); + var valueProvider = new DictionaryBasedValueProvider(values); // Act var result = await ModelBindingHelper.TryUpdateModelAsync( @@ -105,7 +105,7 @@ namespace Microsoft.AspNet.Mvc.Core.Test { "", null }, { "MyProperty", "MyPropertyValue" } }; - var valueProvider = new DictionaryBasedValueProvider(values); + var valueProvider = new DictionaryBasedValueProvider(values); // Act var result = await ModelBindingHelper.TryUpdateModelAsync( @@ -137,7 +137,7 @@ namespace Microsoft.AspNet.Mvc.Core.Test public string MyProperty { get; set; } } - private class TestValueBinderMarker : IValueBinderMarker + private class TestValueBinderMetadata : IValueProviderMetadata { } } diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingTests.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingTests.cs index 93a8f9b0ad..fb9af37b56 100644 --- a/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingTests.cs +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/ModelBindingTests.cs @@ -64,7 +64,7 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests } [Fact] - public async Task ParametersWithNoMarkersUseTheAvailableValueProviders() + public async Task ParametersWithNoValueProviderMetadataUseTheAvailableValueProviders() { // Arrange var server = TestServer.Create(_services, _app); @@ -72,8 +72,8 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests // Act var response = await - client.GetAsync("http://localhost/WithMarker" + - "/ParametersWithNoMarkersUseTheAvailableValueProviders" + + client.GetAsync("http://localhost/WithMetadata" + + "/ParametersWithNoValueProviderMetadataUseTheAvailableValueProviders" + "?Name=somename&Age=12"); //Assert @@ -94,7 +94,7 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests // Act var response = await - client.GetAsync("http://localhost/WithoutMarker" + + client.GetAsync("http://localhost/WithoutMetadata" + "/GetPersonParameter" + "?Name=somename&Age=12"); diff --git a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/Binders/MutableObjectModelBinderTest.cs b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/Binders/MutableObjectModelBinderTest.cs index 6595458774..380d462f4d 100644 --- a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/Binders/MutableObjectModelBinderTest.cs +++ b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/Binders/MutableObjectModelBinderTest.cs @@ -931,7 +931,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding modelAccessor: null, methodInfo: methodInfo, parameterName: parameterName, - binderMarker: null); + binderMetadata: null); } private class Person diff --git a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/Metadata/CachedDataAnnotationsModelMetadataProviderTest.cs b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/Metadata/CachedDataAnnotationsModelMetadataProviderTest.cs index a2a442344e..b06ce58316 100644 --- a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/Metadata/CachedDataAnnotationsModelMetadataProviderTest.cs +++ b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/Metadata/CachedDataAnnotationsModelMetadataProviderTest.cs @@ -67,7 +67,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding modelAccessor: null, methodInfo: methodInfo, parameterName: "param", - binderMarker: null); + binderMetadata: null); // Assert Assert.Equal(expectedIncludedPropertyNames.ToList(), metadata.IncludedProperties); @@ -86,8 +86,8 @@ namespace Microsoft.AspNet.Mvc.ModelBinding var metadata = provider.GetMetadataForParameter( modelAccessor: null, methodInfo: methodInfo, - parameterName: "param", - binderMarker: null); + parameterName: "param", + binderMetadata: null); // Assert Assert.Equal("ParameterPrefix", metadata.ModelName); @@ -119,8 +119,8 @@ namespace Microsoft.AspNet.Mvc.ModelBinding var metadata = provider.GetMetadataForParameter( modelAccessor: null, methodInfo: methodInfo, - parameterName: "param", - binderMarker: null); + parameterName: "param", + binderMetadata: null); // Assert Assert.Equal("ParameterPrefix", metadata.ModelName); diff --git a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/Utils/SimpleHttpValueProvider.cs b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/Utils/SimpleHttpValueProvider.cs index 94066d8a17..30f5f96114 100644 --- a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/Utils/SimpleHttpValueProvider.cs +++ b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/Utils/SimpleHttpValueProvider.cs @@ -68,11 +68,5 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test return Task.FromResult(result); } - - public bool IsValidFor(Type valueProviderMarkerType) - { - // since this is not aware for any marker type, it should return false. - return false; - } } } diff --git a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/CompositeValueProviderTests.cs b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/CompositeValueProviderTests.cs index c19f7c27b8..ceddc0d88e 100644 --- a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/CompositeValueProviderTests.cs +++ b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/CompositeValueProviderTests.cs @@ -12,53 +12,53 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test { public class CompositeValueProviderTests { - public static IEnumerable RegisteredAsMarkerClasses + public static IEnumerable RegisteredAsMetadataClasses { get { - yield return new object[] { new TestValueBinderMarker() }; - yield return new object[] { new DerivedValueBinder() }; + yield return new object[] { new TestValueProviderMetadata() }; + yield return new object[] { new DerivedValueBinderMetadata() }; } } [Theory] - [MemberData(nameof(RegisteredAsMarkerClasses))] - public void FilterReturnsItself_ForAnyClassRegisteredAsGenericParam(IValueBinderMarker binderMarker) + [MemberData(nameof(RegisteredAsMetadataClasses))] + public void FilterReturnsItself_ForAnyClassRegisteredAsGenericParam(IValueProviderMetadata metadata) { // Arrange var values = new Dictionary(StringComparer.OrdinalIgnoreCase); - var unrelatedMarker = new UnrelatedValueBinderMarker(); - var valueProvider1 = GetMockValueProvider(binderMarker); - var valueProvider2 = GetMockValueProvider(unrelatedMarker); + var unrelatedMetadata = new UnrelatedValueBinderMetadata(); + var valueProvider1 = GetMockValueProvider(metadata); + var valueProvider2 = GetMockValueProvider(unrelatedMetadata); var provider = new CompositeValueProvider(new List() { valueProvider1.Object, valueProvider2.Object }); // Act - var result = provider.Filter(binderMarker); + var result = provider.Filter(metadata); // Assert var valueProvider = Assert.IsType(result); var filteredProvider = Assert.Single(valueProvider); - // should not be unrelated marker. + // should not be unrelated metadata. Assert.Same(valueProvider1.Object, filteredProvider); } - private Mock GetMockValueProvider(IValueBinderMarker marker) + private Mock GetMockValueProvider(IValueProviderMetadata metadata) { - var valueProvider = new Mock(); - valueProvider.Setup(o => o.Filter(marker)) + var valueProvider = new Mock(); + valueProvider.Setup(o => o.Filter(metadata)) .Returns(valueProvider.Object); return valueProvider; } - private class TestValueBinderMarker : IValueBinderMarker + private class TestValueProviderMetadata : IValueProviderMetadata { } - private class DerivedValueBinder : TestValueBinderMarker + private class DerivedValueBinderMetadata : TestValueProviderMetadata { } - private class UnrelatedValueBinderMarker : IValueBinderMarker + private class UnrelatedValueBinderMetadata : IValueProviderMetadata { } } diff --git a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/DictionaryBasedValueProviderTests.cs b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/DictionaryBasedValueProviderTests.cs index d76ef52f8b..b9cf2f916b 100644 --- a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/DictionaryBasedValueProviderTests.cs +++ b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/DictionaryBasedValueProviderTests.cs @@ -18,7 +18,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding { { "test-key", "value" } }; - var provider = new DictionaryBasedValueProvider(values); + var provider = new DictionaryBasedValueProvider(values); // Act var result = await provider.GetValueAsync("not-test-key"); @@ -35,7 +35,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding { { "test-key", "test-value" } }; - var provider = new DictionaryBasedValueProvider(values); + var provider = new DictionaryBasedValueProvider(values); // Act var result = await provider.GetValueAsync("test-key"); @@ -52,7 +52,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding { { "test-key", null } }; - var provider = new DictionaryBasedValueProvider(values); + var provider = new DictionaryBasedValueProvider(values); // Act var result = await provider.GetValueAsync("test-key"); @@ -76,7 +76,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding { "bar.baz", 1 }, }; - var valueProvider = new DictionaryBasedValueProvider(values); + var valueProvider = new DictionaryBasedValueProvider(values); // Act var result = await valueProvider.ContainsPrefixAsync(prefix); @@ -97,7 +97,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding { "bar.baz", 2 }, }; - var valueProvider = new DictionaryBasedValueProvider(values); + var valueProvider = new DictionaryBasedValueProvider(values); // Act var result = await valueProvider.GetValueAsync(prefix); @@ -115,7 +115,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding { "bar.baz", 2 }, }; - var valueProvider = new DictionaryBasedValueProvider(values); + var valueProvider = new DictionaryBasedValueProvider(values); // Act var result = await valueProvider.GetValueAsync("bar"); @@ -132,7 +132,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding { { "test-key", "test-value" } }; - var provider = new DictionaryBasedValueProvider(values); + var provider = new DictionaryBasedValueProvider(values); // Act var result = await provider.ContainsPrefixAsync("not-test-key"); @@ -149,7 +149,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding { { "test-key", "test-value" } }; - var provider = new DictionaryBasedValueProvider(values); + var provider = new DictionaryBasedValueProvider(values); // Act var result = await provider.ContainsPrefixAsync("test-key"); @@ -158,36 +158,36 @@ namespace Microsoft.AspNet.Mvc.ModelBinding Assert.True(result); } - public static IEnumerable RegisteredAsMarkerClasses + public static IEnumerable RegisteredAsMetadataClasses { get { - yield return new object[] { new TestValueBinderMarker() }; - yield return new object[] { new DerivedValueBinder() }; + yield return new object[] { new TestValueProviderMetadata() }; + yield return new object[] { new DerivedValueProviderMetadata() }; } } [Theory] - [MemberData(nameof(RegisteredAsMarkerClasses))] - public void FilterReturnsItself_ForAnyClassRegisteredAsGenericParam(IValueBinderMarker binderMarker) + [MemberData(nameof(RegisteredAsMetadataClasses))] + public void FilterReturnsItself_ForAnyClassRegisteredAsGenericParam(IValueProviderMetadata metadata) { // Arrange var values = new Dictionary(StringComparer.OrdinalIgnoreCase); - var provider = new DictionaryBasedValueProvider(values); + var provider = new DictionaryBasedValueProvider(values); // Act - var result = provider.Filter(binderMarker); + var result = provider.Filter(metadata); // Assert Assert.NotNull(result); - Assert.IsType>(result); + Assert.IsType>(result); } - private class TestValueBinderMarker : IValueBinderMarker + private class TestValueProviderMetadata : IValueProviderMetadata { } - private class DerivedValueBinder :TestValueBinderMarker + private class DerivedValueProviderMetadata :TestValueProviderMetadata { } } diff --git a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/FormValueProviderFactoryTests.cs b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/FormValueProviderFactoryTests.cs index 7292fc665a..4796dc7005 100644 --- a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/FormValueProviderFactoryTests.cs +++ b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/FormValueProviderFactoryTests.cs @@ -42,7 +42,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test var result = factory.GetValueProvider(context); // Assert - var valueProvider = Assert.IsType>(result); + var valueProvider = Assert.IsType>(result); Assert.Equal(CultureInfo.CurrentCulture, valueProvider.Culture); } diff --git a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/QueryStringValueProviderFactoryTest.cs b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/QueryStringValueProviderFactoryTest.cs index fe4f715062..dc046134bd 100644 --- a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/QueryStringValueProviderFactoryTest.cs +++ b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/QueryStringValueProviderFactoryTest.cs @@ -26,13 +26,15 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test var context = new Mock(); context.SetupGet(c => c.Items).Returns(new Dictionary()); context.SetupGet(c => c.Request).Returns(request.Object); - var factoryContext = new ValueProviderFactoryContext(context.Object, new Dictionary(StringComparer.OrdinalIgnoreCase)); + var factoryContext = new ValueProviderFactoryContext( + context.Object, + new Dictionary(StringComparer.OrdinalIgnoreCase)); // Act var result = _factory.GetValueProvider(factoryContext); // Assert - var valueProvider = Assert.IsType>(result); + var valueProvider = Assert.IsType>(result); Assert.Equal(CultureInfo.InvariantCulture, valueProvider.Culture); } #endif diff --git a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/ReadableStringCollectionValueProviderTests.cs b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/ReadableStringCollectionValueProviderTests.cs index 8326e9418d..a5989a133a 100644 --- a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/ReadableStringCollectionValueProviderTests.cs +++ b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/ReadableStringCollectionValueProviderTests.cs @@ -28,7 +28,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test { // Arrange var backingStore = new ReadableStringCollection(new Dictionary()); - var valueProvider = new ReadableStringCollectionValueProvider(backingStore, null); + var valueProvider = new ReadableStringCollectionValueProvider(backingStore, null); // Act var result = await valueProvider.ContainsPrefixAsync(""); @@ -41,7 +41,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test public async Task ContainsPrefixAsync_WithNonEmptyCollection_ReturnsTrueForEmptyPrefix() { // Arrange - var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); + var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); // Act var result = await valueProvider.ContainsPrefixAsync(""); @@ -54,7 +54,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test public async Task ContainsPrefixAsync_WithNonEmptyCollection_ReturnsTrueForKnownPrefixes() { // Arrange - var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); + var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); // Act & Assert Assert.True(await valueProvider.ContainsPrefixAsync("foo")); @@ -66,7 +66,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test public async Task ContainsPrefixAsync_WithNonEmptyCollection_ReturnsFalseForUnknownPrefix() { // Arrange - var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); + var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); // Act var result = await valueProvider.ContainsPrefixAsync("biff"); @@ -86,7 +86,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test { "null_value", "null_value" }, { "prefix", "prefix" } }; - var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, culture: null); + var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, culture: null); // Act var result = await valueProvider.GetKeysFromPrefixAsync(""); @@ -99,7 +99,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test public async Task GetKeysFromPrefixAsync_UnknownPrefix_ReturnsEmptyDictionary() { // Arrange - var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); + var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); // Act var result = await valueProvider.GetKeysFromPrefixAsync("abc"); @@ -112,7 +112,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test public async Task GetKeysFromPrefixAsync_KnownPrefix_ReturnsMatchingItems() { // Arrange - var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); + var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); // Act var result = await valueProvider.GetKeysFromPrefixAsync("bar"); @@ -128,7 +128,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test { // Arrange var culture = new CultureInfo("fr-FR"); - var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, culture); + var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, culture); // Act var vpResult = await valueProvider.GetValueAsync("bar.baz"); @@ -145,7 +145,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test { // Arrange var culture = new CultureInfo("fr-FR"); - var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, culture); + var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, culture); // Act var vpResult = await valueProvider.GetValueAsync("foo"); @@ -188,7 +188,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test { "key", new string[] { null, null, "value" } } }); var culture = new CultureInfo("fr-FR"); - var valueProvider = new ReadableStringCollectionValueProvider(backingStore, culture); + var valueProvider = new ReadableStringCollectionValueProvider(backingStore, culture); // Act var vpResult = await valueProvider.GetValueAsync("key"); @@ -202,7 +202,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test public async Task GetValueAsync_ReturnsNullIfKeyNotFound() { // Arrange - var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); + var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); // Act var vpResult = await valueProvider.GetValueAsync("bar"); @@ -211,35 +211,35 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test Assert.Null(vpResult); } - public static IEnumerable RegisteredAsMarkerClasses + public static IEnumerable RegisteredAsMetadataClasses { get { - yield return new object[] { new TestValueBinderMarker() }; - yield return new object[] { new DerivedValueBinder() }; + yield return new object[] { new TestValueProviderMetadata() }; + yield return new object[] { new DerivedValueProviderMetadata() }; } } [Theory] - [MemberData(nameof(RegisteredAsMarkerClasses))] - public void FilterReturnsItself_ForAnyClassRegisteredAsGenericParam(IValueBinderMarker binderMarker) + [MemberData(nameof(RegisteredAsMetadataClasses))] + public void FilterReturnsItself_ForAnyClassRegisteredAsGenericParam(IValueProviderMetadata metadata) { // Arrange - var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); + var valueProvider = new ReadableStringCollectionValueProvider(_backingStore, null); // Act - var result = valueProvider.Filter(binderMarker); + var result = valueProvider.Filter(metadata); // Assert Assert.NotNull(result); - Assert.IsType>(result); + Assert.IsType>(result); } - private class TestValueBinderMarker : IValueBinderMarker + private class TestValueProviderMetadata : IValueProviderMetadata { } - private class DerivedValueBinder : TestValueBinderMarker + private class DerivedValueProviderMetadata : TestValueProviderMetadata { } } diff --git a/test/Microsoft.AspNet.Mvc.WebApiCompatShimTest/ApiControllerActionDiscoveryTest.cs b/test/Microsoft.AspNet.Mvc.WebApiCompatShimTest/ApiControllerActionDiscoveryTest.cs index 87502ccd5a..c37bb5aee8 100644 --- a/test/Microsoft.AspNet.Mvc.WebApiCompatShimTest/ApiControllerActionDiscoveryTest.cs +++ b/test/Microsoft.AspNet.Mvc.WebApiCompatShimTest/ApiControllerActionDiscoveryTest.cs @@ -275,7 +275,7 @@ namespace System.Web.Http foreach (var action in actions) { var parameter = Assert.Single(action.Parameters); - Assert.IsType(parameter.BinderMarker); + Assert.IsType(parameter.BinderMetadata); } } @@ -302,12 +302,12 @@ namespace System.Web.Http foreach (var action in actions) { var parameter = Assert.Single(action.Parameters); - Assert.IsType(parameter.BinderMarker); + Assert.IsType(parameter.BinderMetadata); } } [Fact] - public void GetActions_Parameters_BinderMarker() + public void GetActions_Parameters_BinderMetadata() { // Arrange var provider = CreateProvider(); @@ -329,7 +329,7 @@ namespace System.Web.Http foreach (var action in actions) { var parameter = Assert.Single(action.Parameters); - Assert.IsType(parameter.BinderMarker); + Assert.IsType(parameter.BinderMetadata); } } diff --git a/test/Microsoft.AspNet.Mvc.WebApiCompatShimTest/OverloadActionConstraintTest.cs b/test/Microsoft.AspNet.Mvc.WebApiCompatShimTest/OverloadActionConstraintTest.cs index ddf21d416b..1725d77fd8 100644 --- a/test/Microsoft.AspNet.Mvc.WebApiCompatShimTest/OverloadActionConstraintTest.cs +++ b/test/Microsoft.AspNet.Mvc.WebApiCompatShimTest/OverloadActionConstraintTest.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Web.Http; using Microsoft.AspNet.Http; +using Microsoft.AspNet.Mvc.ModelBinding; using Microsoft.AspNet.PipelineCore; using Microsoft.AspNet.Routing; using Xunit; @@ -21,7 +22,7 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, @@ -51,13 +52,13 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "quantity", ParameterBindingInfo = new ParameterBindingInfo("quantity", typeof(int)), }, @@ -87,13 +88,13 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "quantity", ParameterBindingInfo = new ParameterBindingInfo("quantity", typeof(int)), }, @@ -123,13 +124,13 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "quantity", ParameterBindingInfo = new ParameterBindingInfo("quantity", typeof(int)), }, @@ -159,13 +160,13 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "quantity", IsOptional = true, ParameterBindingInfo = new ParameterBindingInfo("quantity", typeof(int)), @@ -196,13 +197,13 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "quantity", ParameterBindingInfo = new ParameterBindingInfo("quantity", typeof(int)), }, @@ -213,13 +214,13 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "quantity_ordered", ParameterBindingInfo = new ParameterBindingInfo("quantity_ordered", typeof(int)), }, @@ -253,7 +254,7 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, @@ -264,13 +265,13 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "quantity", ParameterBindingInfo = new ParameterBindingInfo("quantity", typeof(int)), }, @@ -301,13 +302,13 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "quantity", IsOptional = true, ParameterBindingInfo = new ParameterBindingInfo("quantity", typeof(int)), @@ -319,13 +320,13 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "quantity", ParameterBindingInfo = new ParameterBindingInfo("quantity", typeof(int)), }, @@ -356,13 +357,13 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "quantity", ParameterBindingInfo = new ParameterBindingInfo("quantity", typeof(int)), }, @@ -373,13 +374,13 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "price", ParameterBindingInfo = new ParameterBindingInfo("price", typeof(decimal)), }, @@ -413,7 +414,7 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, @@ -424,13 +425,14 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), + IsOptional = true, Name = "quantity", ParameterBindingInfo = new ParameterBindingInfo("quantity", typeof(int)), }, @@ -461,7 +463,7 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, @@ -472,13 +474,13 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim { new ParameterDescriptor() { - BinderMarker = new FromUriAttribute(), + BinderMetadata = new FromUriAttribute(), Name = "id", ParameterBindingInfo = new ParameterBindingInfo("id", typeof(int)), }, new ParameterDescriptor() { - BinderMarker = new FromBodyAttribute(), + BinderMetadata = new FromBodyAttribute(), Name = "quantity", ParameterBindingInfo = new ParameterBindingInfo("quantity", typeof(int)), }, diff --git a/test/WebSites/ModelBindingWebSite/Controllers/WithBinderMetadataController.cs b/test/WebSites/ModelBindingWebSite/Controllers/WithBinderMetadataController.cs new file mode 100644 index 0000000000..059b0c6988 --- /dev/null +++ b/test/WebSites/ModelBindingWebSite/Controllers/WithBinderMetadataController.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.AspNet.Mvc; + +namespace ModelBindingWebSite.Controllers +{ + public class WithMetadataController : Controller + { + public EmployeeWithMetadata BindWithTypeMetadata(EmployeeWithMetadata emp) + { + return emp; + } + + public DerivedEmployee TypeMetadataAtDerivedTypeWinsOverTheBaseType(DerivedEmployee emp) + { + return emp; + } + + public void ParameterMetadataOverridesTypeMetadata([FromBody] Employee emp) + { + } + + public Employee ParametersWithNoValueProviderMetadataUseTheAvailableValueProviders([FromQuery] Employee emp) + { + return emp; + } + } +} \ No newline at end of file diff --git a/test/WebSites/ModelBindingWebSite/Controllers/WithMarkerController.cs b/test/WebSites/ModelBindingWebSite/Controllers/WithMarkerController.cs deleted file mode 100644 index b602e44da0..0000000000 --- a/test/WebSites/ModelBindingWebSite/Controllers/WithMarkerController.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using Microsoft.AspNet.Mvc; -using Microsoft.AspNet.Mvc.ModelBinding; - -namespace ModelBindingWebSite.Controllers -{ - public class WithMarkerController : Controller - { - public EmployeeWithMarker BindWithTypeMarker(EmployeeWithMarker emp) - { - return emp; - } - - public DerivedEmployee TypeMarkerAtDerivedTypeWinsOverTheBaseType(DerivedEmployee emp) - { - return emp; - } - - public void ParameterMarkerOverridesTypeMarker([FromBody] Employee emp) - { - } - - public Employee ParametersWithNoMarkersUseTheAvailableValueProviders([FromQuery] Employee emp) - { - return emp; - } - } -} \ No newline at end of file diff --git a/test/WebSites/ModelBindingWebSite/Controllers/WithoutMarkerController.cs b/test/WebSites/ModelBindingWebSite/Controllers/WithoutBinderMetadataController.cs similarity index 91% rename from test/WebSites/ModelBindingWebSite/Controllers/WithoutMarkerController.cs rename to test/WebSites/ModelBindingWebSite/Controllers/WithoutBinderMetadataController.cs index 3476b66eda..97ad2f6702 100644 --- a/test/WebSites/ModelBindingWebSite/Controllers/WithoutMarkerController.cs +++ b/test/WebSites/ModelBindingWebSite/Controllers/WithoutBinderMetadataController.cs @@ -6,7 +6,7 @@ using Microsoft.AspNet.Mvc; namespace ModelBindingWebSite.Controllers { - public class WithoutMarkerController : Controller + public class WithoutMetadataController : Controller { public Person Person { get; set; } diff --git a/test/WebSites/ModelBindingWebSite/Model/EmployeeWithMarker.cs b/test/WebSites/ModelBindingWebSite/Model/EmployeeWithBinderMetadata.cs similarity index 72% rename from test/WebSites/ModelBindingWebSite/Model/EmployeeWithMarker.cs rename to test/WebSites/ModelBindingWebSite/Model/EmployeeWithBinderMetadata.cs index b220c6f6d4..b1674fab0d 100644 --- a/test/WebSites/ModelBindingWebSite/Model/EmployeeWithMarker.cs +++ b/test/WebSites/ModelBindingWebSite/Model/EmployeeWithBinderMetadata.cs @@ -5,11 +5,11 @@ using Microsoft.AspNet.Mvc; namespace ModelBindingWebSite { - public class EmployeeWithMarker : Employee + public class EmployeeWithMetadata : Employee { } - public class DerivedEmployee : EmployeeWithMarker + public class DerivedEmployee : EmployeeWithMetadata { } diff --git a/test/WebSites/ValueProvidersSite/CustomValueProviderFactory.cs b/test/WebSites/ValueProvidersSite/CustomValueProviderFactory.cs index e88b998067..2c482ace11 100644 --- a/test/WebSites/ValueProvidersSite/CustomValueProviderFactory.cs +++ b/test/WebSites/ValueProvidersSite/CustomValueProviderFactory.cs @@ -34,11 +34,6 @@ namespace ValueProvidersSite var result = new ValueProviderResult(value, value, CultureInfo.CurrentCulture); return Task.FromResult(result); } - - public bool IsValidFor(Type valueProviderMarkerType) - { - return false; - } } } } \ No newline at end of file