// 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 System.Collections.Generic; using System.Diagnostics; using System.Reflection; using Microsoft.AspNetCore.Mvc.ModelBinding; namespace Microsoft.AspNetCore.Mvc.ApplicationModels { /// /// A type which is used to represent a property in a . /// [DebuggerDisplay("PropertyModel: Name={PropertyName}")] public class PropertyModel : ParameterModelBase, ICommonModel, IBindingModel { /// /// Creates a new instance of . /// /// The for the underlying property. /// Any attributes which are annotated on the property. public PropertyModel( PropertyInfo propertyInfo, IReadOnlyList attributes) : base(propertyInfo?.PropertyType, attributes) { PropertyInfo = propertyInfo ?? throw new ArgumentNullException(nameof(propertyInfo)); } /// /// Creates a new instance of from a given . /// /// The which needs to be copied. public PropertyModel(PropertyModel other) : base(other) { if (other == null) { throw new ArgumentNullException(nameof(other)); } Controller = other.Controller; BindingInfo = BindingInfo == null ? null : new BindingInfo(other.BindingInfo); PropertyInfo = other.PropertyInfo; } /// /// Gets or sets the this is associated with. /// public ControllerModel Controller { get; set; } MemberInfo ICommonModel.MemberInfo => PropertyInfo; public new IDictionary Properties => base.Properties; public new IReadOnlyList Attributes => base.Attributes; public PropertyInfo PropertyInfo { get; } public string PropertyName { get => Name; set => Name = value; } } }