| File: ApplicationModel\ConnectionStringEnvironmentVariableNames.cs | Web Access |
| Project: src\src\Aspire.Hosting\Aspire.Hosting.csproj (Aspire.Hosting) |
// 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.CodeAnalysis; namespace Aspire.Hosting.ApplicationModel; /// <summary> /// Describes the logical and physical names used for a connection-string reference. /// </summary> [Experimental("ASPIRECONNECTIONSTRINGS001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] public sealed record ConnectionStringEnvironmentVariableNames { private const string Prefix = "ConnectionStrings__"; internal ConnectionStringEnvironmentVariableNames(string logicalName, string originalName, string portableName, bool isExplicit) { LogicalName = logicalName; OriginalName = originalName; PortableName = portableName; IsExplicit = isExplicit; } /// <summary> /// Gets the logical connection name used by application configuration. /// </summary> public string LogicalName { get; init; } /// <summary> /// Gets the original environment-variable name derived directly from the logical name. /// </summary> public string OriginalName { get; init; } /// <summary> /// Gets the portable environment-variable name. /// </summary> public string PortableName { get; init; } /// <summary> /// Gets whether the physical environment-variable name was explicitly supplied by the source resource. /// </summary> public bool IsExplicit { get; init; } /// <summary> /// Deconstructs the logical and physical names for a connection-string reference. /// </summary> /// <param name="LogicalName">The logical connection name used by application configuration.</param> /// <param name="OriginalName">The original environment-variable name derived directly from the logical name.</param> /// <param name="PortableName">The portable environment-variable name.</param> /// <param name="IsExplicit">Whether the physical environment-variable name was explicitly supplied by the source resource.</param> public void Deconstruct(out string LogicalName, out string OriginalName, out string PortableName, out bool IsExplicit) { LogicalName = this.LogicalName; OriginalName = this.OriginalName; PortableName = this.PortableName; IsExplicit = this.IsExplicit; } /// <summary> /// Creates the logical and physical environment-variable names for a connection-string reference. /// </summary> /// <param name="resource">The referenced resource.</param> /// <param name="logicalName">The logical connection name.</param> /// <returns>The logical and physical environment-variable names.</returns> public static ConnectionStringEnvironmentVariableNames Create(IResourceWithConnectionString resource, string logicalName) { ArgumentNullException.ThrowIfNull(resource); ArgumentNullException.ThrowIfNull(logicalName); if (resource.ConnectionStringEnvironmentVariable is { } explicitName) { return new(logicalName, explicitName, explicitName, isExplicit: true); } return new( logicalName, Prefix + logicalName, Prefix + EnvironmentVariableNameEncoder.EncodeConnectionStringName(logicalName), isExplicit: false); } /// <summary> /// Enumerates the distinct physical environment-variable names represented by this value. /// </summary> /// <returns>The physical environment-variable names.</returns> public IEnumerable<string> GetPhysicalNames() { yield return OriginalName; if (!string.Equals(OriginalName, PortableName, StringComparison.OrdinalIgnoreCase)) { yield return PortableName; } } }