| File: ViewComponents\ViewComponentContext.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.ViewFeatures\src\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj (Microsoft.AspNetCore.Mvc.ViewFeatures) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable enable using System.Text.Encodings.Web; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.ViewFeatures; namespace Microsoft.AspNetCore.Mvc.ViewComponents; /// <summary> /// A context for view components. /// </summary> public class ViewComponentContext { /// <summary> /// Creates a new <see cref="ViewComponentContext"/>. /// </summary> /// <remarks> /// The default constructor is provided for unit test purposes only. /// </remarks> public ViewComponentContext() { ViewComponentDescriptor = new ViewComponentDescriptor(); ViewContext = new ViewContext(); } /// <summary> /// Creates a new <see cref="ViewComponentContext"/>. /// </summary> /// <param name="viewComponentDescriptor"> /// The <see cref="ViewComponentContext"/> for the view component being invoked. /// </param> /// <param name="arguments">The view component arguments.</param> /// <param name="htmlEncoder">The <see cref="HtmlEncoder"/> to use.</param> /// <param name="viewContext">The <see cref="ViewContext"/>.</param> /// <param name="writer">The <see cref="TextWriter"/> for writing output.</param> public ViewComponentContext( ViewComponentDescriptor viewComponentDescriptor, IDictionary<string, object?> arguments, HtmlEncoder htmlEncoder, ViewContext viewContext, TextWriter writer) { ArgumentNullException.ThrowIfNull(viewComponentDescriptor); ArgumentNullException.ThrowIfNull(arguments); ArgumentNullException.ThrowIfNull(htmlEncoder); ArgumentNullException.ThrowIfNull(viewContext); ArgumentNullException.ThrowIfNull(writer); ViewComponentDescriptor = viewComponentDescriptor; Arguments = arguments; HtmlEncoder = htmlEncoder; // We want to create a defensive copy of the VDD here so that changes done in the VC // aren't visible in the calling view. ViewContext = new ViewContext( viewContext, viewContext.View, new ViewDataDictionary<object>(viewContext.ViewData), writer); } /// <summary> /// Gets or sets the view component arguments. /// </summary> /// <remarks> /// The property setter is provided for unit test purposes only. /// </remarks> public IDictionary<string, object?> Arguments { get; set; } = default!; /// <summary> /// Gets or sets the <see cref="System.Text.Encodings.Web.HtmlEncoder"/>. /// </summary> /// <remarks> /// The property setter is provided for unit test purposes only. /// </remarks> public HtmlEncoder HtmlEncoder { get; set; } = default!; /// <summary> /// Gets or sets the <see cref="ViewComponents.ViewComponentDescriptor"/> for the view component being invoked. /// </summary> /// <remarks> /// The property setter is provided for unit test purposes only. /// </remarks> public ViewComponentDescriptor ViewComponentDescriptor { get; set; } /// <summary> /// Gets or sets the <see cref="Rendering.ViewContext"/>. /// </summary> /// <remarks> /// The property setter is provided for unit test purposes only. /// </remarks> public ViewContext ViewContext { get; set; } /// <summary> /// Gets the <see cref="ViewDataDictionary"/>. /// </summary> /// <remarks> /// This is an alias for <c>ViewContext.ViewData</c>. /// </remarks> public ViewDataDictionary ViewData => ViewContext.ViewData; /// <summary> /// Gets the <see cref="ITempDataDictionary"/>. /// </summary> /// <remarks> /// This is an alias for <c>ViewContext.TempData</c>. /// </remarks> public ITempDataDictionary TempData => ViewContext.TempData; /// <summary> /// Gets the <see cref="TextWriter"/> for output. /// </summary> /// <remarks> /// This is an alias for <c>ViewContext.Writer</c>. /// </remarks> public TextWriter Writer => ViewContext.Writer; }