| File: ApplicationModels\PropertyModel.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.Core\src\Microsoft.AspNetCore.Mvc.Core.csproj (Microsoft.AspNetCore.Mvc.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; using System.Reflection; using Microsoft.AspNetCore.Mvc.ModelBinding; namespace Microsoft.AspNetCore.Mvc.ApplicationModels; /// <summary> /// A type which is used to represent a property in a <see cref="ControllerModel"/>. /// </summary> [DebuggerDisplay("Type = {GetType().Name}, Name = {PropertyName}")] public class PropertyModel : ParameterModelBase, ICommonModel, IBindingModel { /// <summary> /// Creates a new instance of <see cref="PropertyModel"/>. /// </summary> /// <param name="propertyInfo">The <see cref="PropertyInfo"/> for the underlying property.</param> /// <param name="attributes">Any attributes which are annotated on the property.</param> public PropertyModel( PropertyInfo propertyInfo, IReadOnlyList<object> attributes) : base(propertyInfo.PropertyType, attributes) { PropertyInfo = propertyInfo ?? throw new ArgumentNullException(nameof(propertyInfo)); } /// <summary> /// Creates a new instance of <see cref="PropertyModel"/> from a given <see cref="PropertyModel"/>. /// </summary> /// <param name="other">The <see cref="PropertyModel"/> which needs to be copied.</param> public PropertyModel(PropertyModel other) : base(other) { ArgumentNullException.ThrowIfNull(other); Controller = other.Controller; BindingInfo = other.BindingInfo == null ? null : new BindingInfo(other.BindingInfo); PropertyInfo = other.PropertyInfo; } /// <summary> /// Gets or sets the <see cref="ControllerModel"/> this <see cref="PropertyModel"/> is associated with. /// </summary> public ControllerModel Controller { get; set; } = default!; MemberInfo ICommonModel.MemberInfo => PropertyInfo; /// <inheritdoc/> public new IDictionary<object, object?> Properties => base.Properties; /// <inheritdoc/> public new IReadOnlyList<object> Attributes => base.Attributes; /// <summary> /// The <see cref="PropertyInfo"/>. /// </summary> public PropertyInfo PropertyInfo { get; } /// <summary> /// The name of the property. /// </summary> public string PropertyName { get => Name; set => Name = value; } }