Files
Umbraco-CMS/src/Umbraco.Core/Extensions/ConfigurationExtensions.cs

108 lines
4.7 KiB
C#
Raw Normal View History

using Microsoft.Extensions.Configuration;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Configuration;
using Umbraco.Cms.Core.Configuration.Models;
namespace Umbraco.Extensions;
/// <summary>
/// Extensions for <see cref="IConfiguration" />.
/// </summary>
public static class ConfigurationExtensions
{
/// <summary>
/// The DataDirectory name.
/// </summary>
internal const string DataDirectoryName = "DataDirectory";
/// <summary>
/// The DataDirectory placeholder.
/// </summary>
internal const string DataDirectoryPlaceholder = "|DataDirectory|";
/// <summary>
/// The postfix used to identify a connection string provider setting.
/// </summary>
internal const string ProviderNamePostfix = "_ProviderName";
/// <summary>
/// Gets the provider name for the connection string name (shorthand for <c>GetSection("ConnectionStrings")[name + "_ProviderName"]</c>).
/// </summary>
/// <param name="configuration">The configuration.</param>
/// <param name="name">The connection string key.</param>
/// <returns>
/// The provider name.
/// </returns>
/// <remarks>
/// This uses the same convention as the <a href="https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-6.0#connection-string-prefixes">Configuration API for connection string environment variables</a>.
/// </remarks>
public static string? GetConnectionStringProviderName(this IConfiguration configuration, string name)
=> configuration.GetConnectionString(name + ProviderNamePostfix);
/// <summary>
/// Gets the Umbraco connection string (shorthand for <c>GetSection("ConnectionStrings")[name]</c> and replacing the <c>|DataDirectory|</c> placeholder).
/// </summary>
/// <param name="configuration">The configuration.</param>
/// <param name="name">The connection string key.</param>
/// <returns>
/// The Umbraco connection string.
/// </returns>
public static string? GetUmbracoConnectionString(this IConfiguration configuration, string name = Constants.System.UmbracoConnectionName)
=> configuration.GetUmbracoConnectionString(name, out _);
/// <summary>
/// Gets the Umbraco connection string and provider name (shorthand for <c>GetSection("ConnectionStrings")[Constants.System.UmbracoConnectionName]</c> and replacing the <c>|DataDirectory|</c> placeholder).
/// </summary>
/// <param name="configuration">The configuration.</param>
/// <param name="providerName">The provider name.</param>
/// <returns>
/// The Umbraco connection string.
/// </returns>
public static string? GetUmbracoConnectionString(this IConfiguration configuration, out string? providerName)
=> configuration.GetUmbracoConnectionString(Constants.System.UmbracoConnectionName, out providerName);
/// <summary>
/// Gets the Umbraco connection string and provider name (shorthand for <c>GetSection("ConnectionStrings")[name]</c> and replacing the <c>|DataDirectory|</c> placeholder).
/// </summary>
/// <param name="configuration">The configuration.</param>
/// <param name="name">The name.</param>
/// <param name="providerName">The provider name.</param>
/// <returns>
/// The Umbraco connection string.
/// </returns>
public static string? GetUmbracoConnectionString(this IConfiguration configuration, string name, out string? providerName)
{
string? connectionString = configuration.GetConnectionString(name);
if (!string.IsNullOrEmpty(connectionString))
{
// Replace data directory
merge release/10.0.0 into v10/dev commit 9ff06eec6e82bd90a29a37dd34ecba931859f5f5 Author: Ronald Barendse <ronald@barend.se> Date: Wed May 25 11:16:39 2022 +0200 v10: Instantly reload ConnectionStrings after saving configuration (#12475) * Do not replace DataDirectory placeholder when setting connection string * Ensure ConnectionStrings options are updated when configuration is reloaded * Use CurrentValue to get default Umbraco connection string commit fcee6dc06ad829519202a29c2b549c7c65c47785 Author: Paul Johnson <pmj@umbraco.com> Date: Wed May 25 10:08:43 2022 +0100 Fix legacy scope provider no longer implementing ICoreScopeProvider (#12480) commit 88f3628d0a330374673d187da8843b56a2ee8f0b Author: Paul Johnson <pmj@umbraco.com> Date: Wed May 25 09:49:33 2022 +0100 Fix options monitor setup for connectionstrings (#12472) commit 4eeb03e7fb8c05be615156410efba3ed30e0e9c1 Author: Johan Runsten <jrunestone@users.noreply.github.com> Date: Wed May 25 10:13:25 2022 +0200 Fixed null check typo in CacheInstructionService. Fixes #12473. (#12474) * Fixed null check typo. Fixes #12473. * Removed unneccessary null forgiving operator Co-authored-by: Johan Runsten <johan.runsten@toxic.se> commit d810d66e9a0dbbfd19432b4cab610b728a6944e0 Author: Asbjørn Riis-Knudsen <ar@jf-data.com> Date: Tue May 24 17:41:10 2022 +0200 Fix #12454 by having Coalesce handle null values (#12456) * Fix #12454 by having Coalesce handle null values * Allow null values in Html.Coalesce #12454 commit 963d4c5051f280770303c2e312e8ee9cb67d18cc Author: Paul Johnson <pmj@umbraco.com> Date: Tue May 24 13:55:39 2022 +0100 Ensure unique buildnumber for devops UI
2022-05-25 10:48:45 +01:00
string? dataDirectory = AppDomain.CurrentDomain.GetData(DataDirectoryName)?.ToString();
if (!string.IsNullOrEmpty(dataDirectory))
{
connectionString = connectionString.Replace(DataDirectoryPlaceholder, dataDirectory);
}
// Get provider name
providerName = configuration.GetConnectionStringProviderName(name);
}
else
{
providerName = null;
}
return connectionString;
}
/// <summary>
/// Gets the Umbraco runtime mode.
/// </summary>
/// <param name="configuration">The configuration.</param>
/// <returns>
/// The Umbraco runtime mode.
/// </returns>
public static RuntimeMode GetRuntimeMode(this IConfiguration configuration)
=> configuration.GetValue<RuntimeMode>(Constants.Configuration.ConfigRuntimeMode);
public static ModelsMode GetModelsMode(this IConfiguration configuration) => (configuration.GetSection(Constants.Configuration.ConfigModelsBuilder).Get<ModelsBuilderSettings>() ?? new ModelsBuilderSettings()).ModelsMode;
}