diff --git a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/Metadata/IModelBindingMessageProvider.cs b/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/Metadata/ModelBindingMessageProvider.cs
similarity index 80%
rename from src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/Metadata/IModelBindingMessageProvider.cs
rename to src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/Metadata/ModelBindingMessageProvider.cs
index f189da7094..23918bd649 100644
--- a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/Metadata/IModelBindingMessageProvider.cs
+++ b/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/Metadata/ModelBindingMessageProvider.cs
@@ -8,62 +8,62 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Metadata
///
/// Provider for error messages the model binding system detects.
///
- public interface IModelBindingMessageProvider
+ public abstract class ModelBindingMessageProvider
{
///
/// Error message the model binding system adds when a property with an associated
/// BindRequiredAttribute is not bound.
///
/// Default is "A value for the '{0}' property was not provided.".
- Func MissingBindRequiredValueAccessor { get; }
+ public virtual Func MissingBindRequiredValueAccessor { get; }
///
/// Error message the model binding system adds when either the key or the value of a
/// is bound but not both.
///
/// Default is "A value is required.".
- Func MissingKeyOrValueAccessor { get; }
+ public virtual Func MissingKeyOrValueAccessor { get; }
///
/// Error message the model binding system adds when no value is provided for the request body,
/// but a value is required.
///
/// Default is "A non-empty request body is required.".
- Func MissingRequestBodyRequiredValueAccessor { get; }
+ public virtual Func MissingRequestBodyRequiredValueAccessor { get; }
///
/// Error message the model binding system adds when a null value is bound to a
/// non- property.
///
/// Default is "The value '{0}' is invalid.".
- Func ValueMustNotBeNullAccessor { get; }
+ public virtual Func ValueMustNotBeNullAccessor { get; }
///
/// Error message the model binding system adds when is of type
/// or and value is known.
///
/// Default is "The value '{0}' is not valid for {1}.".
- Func AttemptedValueIsInvalidAccessor { get; }
+ public virtual Func AttemptedValueIsInvalidAccessor { get; }
///
/// Error message the model binding system adds when is of type
/// or and value is unknown.
///
/// Default is "The supplied value is invalid for {0}.".
- Func UnknownValueIsInvalidAccessor { get; }
+ public virtual Func UnknownValueIsInvalidAccessor { get; }
///
/// Fallback error message HTML and tag helpers display when a property is invalid but the
/// s have null s.
///
/// Default is "The value '{0}' is invalid.".
- Func ValueIsInvalidAccessor { get; }
+ public virtual Func ValueIsInvalidAccessor { get; }
///
/// Error message HTML and tag helpers add for client-side validation of numeric formats. Visible in the
/// browser if the field for a float property (for example) does not have a correctly-formatted value.
///
/// Default is "The field {0} must be a number.".
- Func ValueMustBeANumberAccessor { get; }
+ public virtual Func ValueMustBeANumberAccessor { get; }
}
}
diff --git a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelMetadata.cs b/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelMetadata.cs
index 5218ef5e71..36a2f4b357 100644
--- a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelMetadata.cs
+++ b/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelMetadata.cs
@@ -256,9 +256,9 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
public abstract bool IsRequired { get; }
///
- /// Gets the instance.
+ /// Gets the instance.
///
- public abstract IModelBindingMessageProvider ModelBindingMessageProvider { get; }
+ public abstract ModelBindingMessageProvider ModelBindingMessageProvider { get; }
///
/// Gets a value indicating where the current metadata should be ordered relative to other properties
diff --git a/src/Microsoft.AspNetCore.Mvc.Abstractions/breakingchanges.netcore.json b/src/Microsoft.AspNetCore.Mvc.Abstractions/breakingchanges.netcore.json
index eac86224d4..528bb7f5fb 100644
--- a/src/Microsoft.AspNetCore.Mvc.Abstractions/breakingchanges.netcore.json
+++ b/src/Microsoft.AspNetCore.Mvc.Abstractions/breakingchanges.netcore.json
@@ -1,7 +1,11 @@
[
{
"TypeId": "public interface Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IModelBindingMessageProvider",
- "MemberId": "System.Func get_MissingRequestBodyRequiredValueAccessor()",
- "Kind": "Addition"
+ "Kind": "Removal"
+ },
+ {
+ "TypeId": "public abstract class Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata : System.IEquatable",
+ "MemberId": "public abstract Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IModelBindingMessageProvider get_ModelBindingMessageProvider()",
+ "Kind": "Removal"
}
]
\ No newline at end of file
diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/BindingMetadata.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/BindingMetadata.cs
index 47352d3cb1..2cf3e8ae5f 100644
--- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/BindingMetadata.cs
+++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/BindingMetadata.cs
@@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Metadata
///
public class BindingMetadata
{
- private ModelBindingMessageProvider _messageProvider;
+ private DefaultModelBindingMessageProvider _messageProvider;
///
/// Gets or sets the .
@@ -53,10 +53,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Metadata
public bool? IsReadOnly { get; set; }
///
- /// Gets the instance. See
+ /// Gets the instance. See
/// .
///
- public ModelBindingMessageProvider ModelBindingMessageProvider
+ public DefaultModelBindingMessageProvider ModelBindingMessageProvider
{
get
{
diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/DefaultModelBindingMessageProvider.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/DefaultModelBindingMessageProvider.cs
new file mode 100644
index 0000000000..938d4f854e
--- /dev/null
+++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/DefaultModelBindingMessageProvider.cs
@@ -0,0 +1,196 @@
+// Copyright (c) .NET Foundation. 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.AspNetCore.Mvc.Core;
+
+namespace Microsoft.AspNetCore.Mvc.ModelBinding.Metadata
+{
+ ///
+ /// Read / write implementation.
+ ///
+ public class DefaultModelBindingMessageProvider : ModelBindingMessageProvider
+ {
+ private Func _missingBindRequiredValueAccessor;
+ private Func _missingKeyOrValueAccessor;
+ private Func _missingRequestBodyRequiredValueAccessor;
+ private Func _valueMustNotBeNullAccessor;
+ private Func _attemptedValueIsInvalidAccessor;
+ private Func _unknownValueIsInvalidAccessor;
+ private Func _valueIsInvalidAccessor;
+ private Func _valueMustBeANumberAccessor;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public DefaultModelBindingMessageProvider()
+ {
+ SetMissingBindRequiredValueAccessor(Resources.FormatModelBinding_MissingBindRequiredMember);
+ SetMissingKeyOrValueAccessor(Resources.FormatKeyValuePair_BothKeyAndValueMustBePresent);
+ SetMissingRequestBodyRequiredValueAccessor(Resources.FormatModelBinding_MissingRequestBodyRequiredMember);
+ SetValueMustNotBeNullAccessor(Resources.FormatModelBinding_NullValueNotValid);
+ SetAttemptedValueIsInvalidAccessor(Resources.FormatModelState_AttemptedValueIsInvalid);
+ SetUnknownValueIsInvalidAccessor(Resources.FormatModelState_UnknownValueIsInvalid);
+ SetValueIsInvalidAccessor(Resources.FormatHtmlGeneration_ValueIsInvalid);
+ SetValueMustBeANumberAccessor(Resources.FormatHtmlGeneration_ValueMustBeNumber);
+ }
+
+ ///
+ /// Initializes a new instance of the class based on
+ /// .
+ ///
+ /// The to duplicate.
+ public DefaultModelBindingMessageProvider(DefaultModelBindingMessageProvider originalProvider)
+ {
+ if (originalProvider == null)
+ {
+ throw new ArgumentNullException(nameof(originalProvider));
+ }
+
+ SetMissingBindRequiredValueAccessor(originalProvider.MissingBindRequiredValueAccessor);
+ SetMissingKeyOrValueAccessor(originalProvider.MissingKeyOrValueAccessor);
+ SetMissingRequestBodyRequiredValueAccessor(originalProvider.MissingRequestBodyRequiredValueAccessor);
+ SetValueMustNotBeNullAccessor(originalProvider.ValueMustNotBeNullAccessor);
+ SetAttemptedValueIsInvalidAccessor(originalProvider.AttemptedValueIsInvalidAccessor);
+ SetUnknownValueIsInvalidAccessor(originalProvider.UnknownValueIsInvalidAccessor);
+ SetValueIsInvalidAccessor(originalProvider.ValueIsInvalidAccessor);
+ SetValueMustBeANumberAccessor(originalProvider.ValueMustBeANumberAccessor);
+ }
+
+ ///
+ public override Func MissingBindRequiredValueAccessor => _missingBindRequiredValueAccessor;
+
+ ///
+ /// Sets the property.
+ ///
+ /// The value to set.
+ public void SetMissingBindRequiredValueAccessor(Func missingBindRequiredValueAccessor)
+ {
+ if (missingBindRequiredValueAccessor == null)
+ {
+ throw new ArgumentNullException(nameof(missingBindRequiredValueAccessor));
+ }
+
+ _missingBindRequiredValueAccessor = missingBindRequiredValueAccessor;
+ }
+
+ ///
+ public override Func MissingKeyOrValueAccessor => _missingKeyOrValueAccessor;
+
+ ///
+ /// Sets the property.
+ ///
+ /// The value to set.
+ public void SetMissingKeyOrValueAccessor(Func missingKeyOrValueAccessor)
+ {
+ if (missingKeyOrValueAccessor == null)
+ {
+ throw new ArgumentNullException(nameof(missingKeyOrValueAccessor));
+ }
+
+ _missingKeyOrValueAccessor = missingKeyOrValueAccessor;
+ }
+
+ ///
+ public override Func MissingRequestBodyRequiredValueAccessor => _missingRequestBodyRequiredValueAccessor;
+
+ ///
+ /// Sets the property.
+ ///
+ /// The value to set.
+ public void SetMissingRequestBodyRequiredValueAccessor(Func missingRequestBodyRequiredValueAccessor)
+ {
+ if (missingRequestBodyRequiredValueAccessor == null)
+ {
+ throw new ArgumentNullException(nameof(missingRequestBodyRequiredValueAccessor));
+ }
+
+ _missingRequestBodyRequiredValueAccessor = missingRequestBodyRequiredValueAccessor;
+ }
+
+ ///
+ public override Func ValueMustNotBeNullAccessor => _valueMustNotBeNullAccessor;
+
+ ///
+ /// Sets the property.
+ ///
+ /// The value to set.
+ public void SetValueMustNotBeNullAccessor(Func valueMustNotBeNullAccessor)
+ {
+ if (valueMustNotBeNullAccessor == null)
+ {
+ throw new ArgumentNullException(nameof(valueMustNotBeNullAccessor));
+ }
+
+ _valueMustNotBeNullAccessor = valueMustNotBeNullAccessor;
+ }
+
+ ///
+ public override Func AttemptedValueIsInvalidAccessor => _attemptedValueIsInvalidAccessor;
+
+ ///
+ /// Sets the property.
+ ///
+ /// The value to set.
+ public void SetAttemptedValueIsInvalidAccessor(Func attemptedValueIsInvalidAccessor)
+ {
+ if (attemptedValueIsInvalidAccessor == null)
+ {
+ throw new ArgumentNullException(nameof(attemptedValueIsInvalidAccessor));
+ }
+
+ _attemptedValueIsInvalidAccessor = attemptedValueIsInvalidAccessor;
+ }
+
+ ///
+ public override Func UnknownValueIsInvalidAccessor => _unknownValueIsInvalidAccessor;
+
+ ///
+ /// Sets the property.
+ ///
+ /// The value to set.
+ public void SetUnknownValueIsInvalidAccessor(Func unknownValueIsInvalidAccessor)
+ {
+ if (unknownValueIsInvalidAccessor == null)
+ {
+ throw new ArgumentNullException(nameof(unknownValueIsInvalidAccessor));
+ }
+
+ _unknownValueIsInvalidAccessor = unknownValueIsInvalidAccessor;
+ }
+
+ ///
+ public override Func ValueIsInvalidAccessor => _valueIsInvalidAccessor;
+
+ ///
+ /// Sets the property.
+ ///
+ /// The value to set.
+ public void SetValueIsInvalidAccessor(Func valueIsInvalidAccessor)
+ {
+ if (valueIsInvalidAccessor == null)
+ {
+ throw new ArgumentNullException(nameof(valueIsInvalidAccessor));
+ }
+
+ _valueIsInvalidAccessor = valueIsInvalidAccessor;
+ }
+
+ ///
+ public override Func ValueMustBeANumberAccessor => _valueMustBeANumberAccessor;
+
+ ///
+ /// Sets the property.
+ ///
+ /// The value to set.
+ public void SetValueMustBeANumberAccessor(Func valueMustBeANumberAccessor)
+ {
+ if (valueMustBeANumberAccessor == null)
+ {
+ throw new ArgumentNullException(nameof(valueMustBeANumberAccessor));
+ }
+
+ _valueMustBeANumberAccessor = valueMustBeANumberAccessor;
+ }
+ }
+}
diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/DefaultModelMetadata.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/DefaultModelMetadata.cs
index f2d7adef2f..d1d2052fd3 100644
--- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/DefaultModelMetadata.cs
+++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/DefaultModelMetadata.cs
@@ -20,7 +20,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Metadata
// Default message provider for all DefaultModelMetadata instances; cloned before exposing to
// IBindingMetadataProvider instances to ensure customizations are not accidentally shared.
- private readonly ModelBindingMessageProvider _modelBindingMessageProvider;
+ private readonly DefaultModelBindingMessageProvider _modelBindingMessageProvider;
private ReadOnlyDictionary
/// The .
public DefaultModelMetadataProvider(ICompositeMetadataDetailsProvider detailsProvider)
- : this(detailsProvider, new ModelBindingMessageProvider())
+ : this(detailsProvider, new DefaultModelBindingMessageProvider())
{
}
@@ -42,7 +42,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Metadata
private DefaultModelMetadataProvider(
ICompositeMetadataDetailsProvider detailsProvider,
- ModelBindingMessageProvider modelBindingMessageProvider)
+ DefaultModelBindingMessageProvider modelBindingMessageProvider)
{
if (detailsProvider == null)
{
@@ -62,10 +62,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Metadata
protected ICompositeMetadataDetailsProvider DetailsProvider { get; }
///
- /// Gets the .
+ /// Gets the .
///
/// Same as in all production scenarios.
- protected ModelBindingMessageProvider ModelBindingMessageProvider { get; }
+ protected DefaultModelBindingMessageProvider ModelBindingMessageProvider { get; }
///
public virtual IEnumerable GetMetadataForProperties(Type modelType)
@@ -110,7 +110,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Metadata
return cacheEntry.Metadata;
}
- private static ModelBindingMessageProvider GetMessageProvider(IOptions optionsAccessor)
+ private static DefaultModelBindingMessageProvider GetMessageProvider(IOptions optionsAccessor)
{
if (optionsAccessor == null)
{
diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/ModelBindingMessageProvider.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/ModelBindingMessageProvider.cs
deleted file mode 100644
index a4fee0832a..0000000000
--- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Metadata/ModelBindingMessageProvider.cs
+++ /dev/null
@@ -1,204 +0,0 @@
-// Copyright (c) .NET Foundation. 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.AspNetCore.Mvc.Core;
-
-namespace Microsoft.AspNetCore.Mvc.ModelBinding.Metadata
-{
- ///
- /// Read / write implementation.
- ///
- public class ModelBindingMessageProvider : IModelBindingMessageProvider
- {
- private Func _missingBindRequiredValueAccessor;
- private Func _missingKeyOrValueAccessor;
- private Func _missingRequestBodyRequiredValueAccessor;
- private Func _valueMustNotBeNullAccessor;
- private Func _attemptedValueIsInvalidAccessor;
- private Func _unknownValueIsInvalidAccessor;
- private Func _valueIsInvalidAccessor;
- private Func _valueMustBeANumberAccessor;
-
- ///
- /// Initializes a new instance of the class.
- ///
- public ModelBindingMessageProvider()
- {
- MissingBindRequiredValueAccessor = Resources.FormatModelBinding_MissingBindRequiredMember;
- MissingKeyOrValueAccessor = Resources.FormatKeyValuePair_BothKeyAndValueMustBePresent;
- MissingRequestBodyRequiredValueAccessor = Resources.FormatModelBinding_MissingRequestBodyRequiredMember;
- ValueMustNotBeNullAccessor = Resources.FormatModelBinding_NullValueNotValid;
- AttemptedValueIsInvalidAccessor = Resources.FormatModelState_AttemptedValueIsInvalid;
- UnknownValueIsInvalidAccessor = Resources.FormatModelState_UnknownValueIsInvalid;
- ValueIsInvalidAccessor = Resources.FormatHtmlGeneration_ValueIsInvalid;
- ValueMustBeANumberAccessor = Resources.FormatHtmlGeneration_ValueMustBeNumber;
- }
-
- ///
- /// Initializes a new instance of the class based on
- /// .
- ///
- /// The to duplicate.
- public ModelBindingMessageProvider(ModelBindingMessageProvider originalProvider)
- {
- if (originalProvider == null)
- {
- throw new ArgumentNullException(nameof(originalProvider));
- }
-
- MissingBindRequiredValueAccessor = originalProvider.MissingBindRequiredValueAccessor;
- MissingKeyOrValueAccessor = originalProvider.MissingKeyOrValueAccessor;
- MissingRequestBodyRequiredValueAccessor = originalProvider.MissingRequestBodyRequiredValueAccessor;
- ValueMustNotBeNullAccessor = originalProvider.ValueMustNotBeNullAccessor;
- AttemptedValueIsInvalidAccessor = originalProvider.AttemptedValueIsInvalidAccessor;
- UnknownValueIsInvalidAccessor = originalProvider.UnknownValueIsInvalidAccessor;
- ValueIsInvalidAccessor = originalProvider.ValueIsInvalidAccessor;
- ValueMustBeANumberAccessor = originalProvider.ValueMustBeANumberAccessor;
- }
-
- ///
- public Func MissingBindRequiredValueAccessor
- {
- get
- {
- return _missingBindRequiredValueAccessor;
- }
- set
- {
- if (value == null)
- {
- throw new ArgumentNullException(nameof(value));
- }
-
- _missingBindRequiredValueAccessor = value;
- }
- }
-
- ///
- public Func MissingKeyOrValueAccessor
- {
- get
- {
- return _missingKeyOrValueAccessor;
- }
- set
- {
- if (value == null)
- {
- throw new ArgumentNullException(nameof(value));
- }
-
- _missingKeyOrValueAccessor = value;
- }
- }
-
- ///
- public Func MissingRequestBodyRequiredValueAccessor
- {
- get
- {
- return _missingRequestBodyRequiredValueAccessor;
- }
- set
- {
- if (value == null)
- {
- throw new ArgumentNullException(nameof(value));
- }
-
- _missingRequestBodyRequiredValueAccessor = value;
- }
- }
-
- ///
- public Func ValueMustNotBeNullAccessor
- {
- get
- {
- return _valueMustNotBeNullAccessor;
- }
- set
- {
- if (value == null)
- {
- throw new ArgumentNullException(nameof(value));
- }
-
- _valueMustNotBeNullAccessor = value;
- }
- }
-
- ///
- public Func AttemptedValueIsInvalidAccessor
- {
- get
- {
- return _attemptedValueIsInvalidAccessor;
- }
- set
- {
- if (value == null)
- {
- throw new ArgumentNullException(nameof(value));
- }
-
- _attemptedValueIsInvalidAccessor = value;
- }
- }
-
- ///
- public Func UnknownValueIsInvalidAccessor
- {
- get
- {
- return _unknownValueIsInvalidAccessor;
- }
- set
- {
- if (value == null)
- {
- throw new ArgumentNullException(nameof(value));
- }
-
- _unknownValueIsInvalidAccessor = value;
- }
- }
-
- ///
- public Func ValueIsInvalidAccessor
- {
- get
- {
- return _valueIsInvalidAccessor;
- }
- set
- {
- if (value == null)
- {
- throw new ArgumentNullException(nameof(value));
- }
-
- _valueIsInvalidAccessor = value;
- }
- }
-
- ///
- public Func ValueMustBeANumberAccessor
- {
- get
- {
- return _valueMustBeANumberAccessor;
- }
- set
- {
- if (value == null)
- {
- throw new ArgumentNullException(nameof(value));
- }
-
- _valueMustBeANumberAccessor = value;
- }
- }
- }
-}
diff --git a/src/Microsoft.AspNetCore.Mvc.Core/MvcOptions.cs b/src/Microsoft.AspNetCore.Mvc.Core/MvcOptions.cs
index 77332ae7ea..8555a18945 100644
--- a/src/Microsoft.AspNetCore.Mvc.Core/MvcOptions.cs
+++ b/src/Microsoft.AspNetCore.Mvc.Core/MvcOptions.cs
@@ -28,7 +28,7 @@ namespace Microsoft.AspNetCore.Mvc
InputFormatters = new FormatterCollection();
OutputFormatters = new FormatterCollection();
ModelBinderProviders = new List();
- ModelBindingMessageProvider = new ModelBindingMessageProvider();
+ ModelBindingMessageProvider = new DefaultModelBindingMessageProvider();
ModelMetadataDetailsProviders = new List();
ModelValidatorProviders = new List();
ValueProviderFactories = new List();
@@ -98,11 +98,11 @@ namespace Microsoft.AspNetCore.Mvc
public IList ModelBinderProviders { get; }
///
- /// Gets the default . Changes here are copied to the
+ /// Gets the default . Changes here are copied to the
/// property of all
/// instances unless overridden in a custom .
///
- public ModelBindingMessageProvider ModelBindingMessageProvider { get; }
+ public DefaultModelBindingMessageProvider ModelBindingMessageProvider { get; }
///
/// Gets a list of instances that will be used to
diff --git a/src/Microsoft.AspNetCore.Mvc.Core/breakingchanges.netcore.json b/src/Microsoft.AspNetCore.Mvc.Core/breakingchanges.netcore.json
index 10a979e1c5..ef60408729 100644
--- a/src/Microsoft.AspNetCore.Mvc.Core/breakingchanges.netcore.json
+++ b/src/Microsoft.AspNetCore.Mvc.Core/breakingchanges.netcore.json
@@ -121,5 +121,29 @@
"TypeId": "public abstract class Microsoft.AspNetCore.Mvc.ControllerBase",
"MemberId": "public virtual Microsoft.AspNetCore.Mvc.SignOutResult SignOut(Microsoft.AspNetCore.Http.Authentication.AuthenticationProperties properties, params System.String[] authenticationSchemes)",
"Kind": "Removal"
+ },
+ {
+ "TypeId": "public class Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider : Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IModelBindingMessageProvider",
+ "Kind": "Removal"
+ },
+ {
+ "TypeId": "public class Microsoft.AspNetCore.Mvc.MvcOptions",
+ "MemberId": "public Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider get_ModelBindingMessageProvider()",
+ "Kind": "Removal"
+ },
+ {
+ "TypeId": "public class Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata",
+ "MemberId": "public Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider get_ModelBindingMessageProvider()",
+ "Kind": "Removal"
+ },
+ {
+ "TypeId": "public class Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata",
+ "MemberId": "public System.Void set_ModelBindingMessageProvider(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider value)",
+ "Kind": "Removal"
+ },
+ {
+ "TypeId": "public class Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata : Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata",
+ "MemberId": "public override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IModelBindingMessageProvider get_ModelBindingMessageProvider()",
+ "Kind": "Removal"
}
]
\ No newline at end of file
diff --git a/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelMetadataTest.cs b/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelMetadataTest.cs
index bb13997b16..7be03ba94d 100644
--- a/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelMetadataTest.cs
+++ b/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelMetadataTest.cs
@@ -527,7 +527,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
}
}
- public override IModelBindingMessageProvider ModelBindingMessageProvider
+ public override ModelBindingMessageProvider ModelBindingMessageProvider
{
get
{
diff --git a/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelStateDictionaryTest.cs b/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelStateDictionaryTest.cs
index 3611cee6ed..d9f891ccb2 100644
--- a/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelStateDictionaryTest.cs
+++ b/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelStateDictionaryTest.cs
@@ -890,8 +890,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
var bindingMetadataProvider = new DefaultBindingMetadataProvider();
var compositeProvider = new DefaultCompositeMetadataDetailsProvider(new[] { bindingMetadataProvider });
var optionsAccessor = new OptionsAccessor();
- optionsAccessor.Value.ModelBindingMessageProvider.UnknownValueIsInvalidAccessor =
- name => $"Hmm, the supplied value is not valid for { name }.";
+ optionsAccessor.Value.ModelBindingMessageProvider.SetUnknownValueIsInvalidAccessor(
+ name => $"Hmm, the supplied value is not valid for { name }.");
var provider = new DefaultModelMetadataProvider(compositeProvider, optionsAccessor);
var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length));
@@ -935,8 +935,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
var bindingMetadataProvider = new DefaultBindingMetadataProvider();
var compositeProvider = new DefaultCompositeMetadataDetailsProvider(new[] { bindingMetadataProvider });
var optionsAccessor = new OptionsAccessor();
- optionsAccessor.Value.ModelBindingMessageProvider.AttemptedValueIsInvalidAccessor =
- (value, name) => $"Hmm, the value '{ value }' is not valid for { name }.";
+ optionsAccessor.Value.ModelBindingMessageProvider.SetAttemptedValueIsInvalidAccessor(
+ (value, name) => $"Hmm, the value '{ value }' is not valid for { name }.");
var provider = new DefaultModelMetadataProvider(compositeProvider, optionsAccessor);
var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length));
diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BodyModelBinderTests.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BodyModelBinderTests.cs
index f568ba7cde..3368825329 100644
--- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BodyModelBinderTests.cs
+++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BodyModelBinderTests.cs
@@ -131,8 +131,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
provider.ForType().BindingDetails(d =>
{
d.BindingSource = BindingSource.Body;
- d.ModelBindingMessageProvider.MissingRequestBodyRequiredValueAccessor =
- () => "Customized error message";
+ d.ModelBindingMessageProvider.SetMissingRequestBodyRequiredValueAccessor(
+ () => "Customized error message");
});
var bindingContext = GetBindingContext(
diff --git a/test/Microsoft.AspNetCore.Mvc.DataAnnotations.Test/Internal/NumericClientModelValidatorTest.cs b/test/Microsoft.AspNetCore.Mvc.DataAnnotations.Test/Internal/NumericClientModelValidatorTest.cs
index 348f7d63ab..e1f0f28264 100644
--- a/test/Microsoft.AspNetCore.Mvc.DataAnnotations.Test/Internal/NumericClientModelValidatorTest.cs
+++ b/test/Microsoft.AspNetCore.Mvc.DataAnnotations.Test/Internal/NumericClientModelValidatorTest.cs
@@ -45,8 +45,11 @@ namespace Microsoft.AspNetCore.Mvc.DataAnnotations.Internal
var provider = new TestModelMetadataProvider();
provider
.ForProperty(typeof(TypeWithNumericProperty), nameof(TypeWithNumericProperty.Id))
- .BindingDetails(d => d.ModelBindingMessageProvider.ValueMustBeANumberAccessor =
- name => $"Error message about '{ name }' from override.");
+ .BindingDetails(d =>
+ {
+ d.ModelBindingMessageProvider.SetValueMustBeANumberAccessor(
+ name => $"Error message about '{ name }' from override.");
+ });
var metadata = provider.GetMetadataForProperty(
typeof(TypeWithNumericProperty),
nameof(TypeWithNumericProperty.Id));
diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ComplexTypeModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ComplexTypeModelBinderIntegrationTest.cs
index 62720b89fe..2346db3912 100644
--- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ComplexTypeModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ComplexTypeModelBinderIntegrationTest.cs
@@ -1847,8 +1847,8 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
.BindingDetails((Action)(binding =>
{
// A real details provider could customize message based on BindingMetadataProviderContext.
- binding.ModelBindingMessageProvider.MissingBindRequiredValueAccessor =
- name => $"Hurts when '{ name }' is not provided.";
+ binding.ModelBindingMessageProvider.SetMissingBindRequiredValueAccessor(
+ name => $"Hurts when '{ name }' is not provided.");
}));
var parameterBinder = ModelBindingTestHelper.GetParameterBinder(metadataProvider);
diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/KeyValuePairModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/KeyValuePairModelBinderIntegrationTest.cs
index 3bca8162ff..985fe67c2c 100644
--- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/KeyValuePairModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/KeyValuePairModelBinderIntegrationTest.cs
@@ -100,7 +100,8 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
.BindingDetails((System.Action)(binding =>
{
// A real details provider could customize message based on BindingMetadataProviderContext.
- binding.ModelBindingMessageProvider.MissingKeyOrValueAccessor = () => $"Hurts when nothing is provided.";
+ binding.ModelBindingMessageProvider.SetMissingKeyOrValueAccessor(
+ () => $"Hurts when nothing is provided.");
}));
var parameterBinder = ModelBindingTestHelper.GetParameterBinder(metadataProvider);
@@ -183,7 +184,8 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
.BindingDetails((System.Action)(binding =>
{
// A real details provider could customize message based on BindingMetadataProviderContext.
- binding.ModelBindingMessageProvider.MissingKeyOrValueAccessor = () => $"Hurts when nothing is provided.";
+ binding.ModelBindingMessageProvider.SetMissingKeyOrValueAccessor(
+ () => $"Hurts when nothing is provided.");
}));
var parameterBinder = ModelBindingTestHelper.GetParameterBinder(metadataProvider);
diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/SimpleTypeModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/SimpleTypeModelBinderIntegrationTest.cs
index 915f2f35e5..cc54117119 100644
--- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/SimpleTypeModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/SimpleTypeModelBinderIntegrationTest.cs
@@ -256,8 +256,8 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
.BindingDetails(binding =>
{
// A real details provider could customize message based on BindingMetadataProviderContext.
- binding.ModelBindingMessageProvider.AttemptedValueIsInvalidAccessor =
- (value, name) => $"Hmm, '{ value }' is not a valid value for '{ name }'.";
+ binding.ModelBindingMessageProvider.SetAttemptedValueIsInvalidAccessor(
+ (value, name) => $"Hmm, '{ value }' is not a valid value for '{ name }'.");
});
var parameterBinder = ModelBindingTestHelper.GetParameterBinder(metadataProvider);
var parameter = new ParameterDescriptor()
@@ -357,8 +357,8 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
.BindingDetails(binding =>
{
// A real details provider could customize message based on BindingMetadataProviderContext.
- binding.ModelBindingMessageProvider.ValueMustNotBeNullAccessor =
- value => $"Hurts when '{ value }' is provided.";
+ binding.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor(
+ value => $"Hurts when '{ value }' is provided.");
});
var parameterBinder = ModelBindingTestHelper.GetParameterBinder(metadataProvider);