using Microsoft.Extensions.Configuration; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Configuration; using Umbraco.Cms.Core.Configuration.Models; namespace Umbraco.Extensions; /// /// Extensions for . /// public static class ConfigurationExtensions { /// /// The postfix used to identify a connection string provider setting. /// internal const string ProviderNamePostfix = "_ProviderName"; /// /// Gets the provider name for the connection string name (shorthand for GetSection("ConnectionStrings")[name + "_ProviderName"]). /// /// The configuration. /// The connection string key. /// /// The provider name. /// /// /// This uses the same convention as the Configuration API for connection string environment variables. /// public static string? GetConnectionStringProviderName(this IConfiguration configuration, string name) => configuration.GetConnectionString(name + ProviderNamePostfix); /// /// Gets the Umbraco connection string (shorthand for GetSection("ConnectionStrings")[name] and replacing the |DataDirectory| placeholder). /// /// The configuration. /// The connection string key. /// /// The Umbraco connection string. /// public static string? GetUmbracoConnectionString(this IConfiguration configuration, string name = Constants.System.UmbracoConnectionName) => configuration.GetUmbracoConnectionString(name, out _); /// /// Gets the Umbraco connection string and provider name (shorthand for GetSection("ConnectionStrings")[Constants.System.UmbracoConnectionName] and replacing the |DataDirectory| placeholder). /// /// The configuration. /// The provider name. /// /// The Umbraco connection string. /// public static string? GetUmbracoConnectionString(this IConfiguration configuration, out string? providerName) => configuration.GetUmbracoConnectionString(Constants.System.UmbracoConnectionName, out providerName); /// /// Gets the Umbraco connection string and provider name (shorthand for GetSection("ConnectionStrings")[name] and replacing the |DataDirectory| placeholder). /// /// The configuration. /// The name. /// The provider name. /// /// The Umbraco connection string. /// public static string? GetUmbracoConnectionString(this IConfiguration configuration, string name, out string? providerName) { string? connectionString = configuration.GetConnectionString(name); if (!string.IsNullOrEmpty(connectionString)) { // Replace data directory string? dataDirectory = AppDomain.CurrentDomain.GetData(Constants.System.DataDirectoryName)?.ToString(); if (!string.IsNullOrEmpty(dataDirectory)) { connectionString = connectionString.Replace(Constants.System.DataDirectoryPlaceholder, dataDirectory); } // Get provider name providerName = configuration.GetConnectionStringProviderName(name); } else { providerName = null; } return connectionString; } /// /// Gets the Umbraco runtime mode. /// /// The configuration. /// /// The Umbraco runtime mode. /// public static RuntimeMode GetRuntimeMode(this IConfiguration configuration) => configuration.GetValue(Constants.Configuration.ConfigRuntimeMode); public static string GetModelsMode(this IConfiguration configuration) => (configuration.GetSection(Constants.Configuration.ConfigModelsBuilder).Get() ?? new ModelsBuilderSettings()).ModelsMode; }