commit9ff06eec6eAuthor: 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 commitfcee6dc06aAuthor: Paul Johnson <pmj@umbraco.com> Date: Wed May 25 10:08:43 2022 +0100 Fix legacy scope provider no longer implementing ICoreScopeProvider (#12480) commit88f3628d0aAuthor: Paul Johnson <pmj@umbraco.com> Date: Wed May 25 09:49:33 2022 +0100 Fix options monitor setup for connectionstrings (#12472) commit4eeb03e7fbAuthor: 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> commitd810d66e9aAuthor: 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 commit963d4c5051Author: Paul Johnson <pmj@umbraco.com> Date: Tue May 24 13:55:39 2022 +0100 Ensure unique buildnumber for devops UI
110 lines
5.7 KiB
C#
110 lines
5.7 KiB
C#
using System.Reflection;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Options;
|
|
using Umbraco.Cms.Core.Configuration;
|
|
using Umbraco.Cms.Core.Configuration.Models;
|
|
using Umbraco.Cms.Core.Configuration.Models.Validation;
|
|
using Umbraco.Extensions;
|
|
|
|
namespace Umbraco.Cms.Core.DependencyInjection;
|
|
|
|
/// <summary>
|
|
/// Extension methods for <see cref="IUmbracoBuilder" />
|
|
/// </summary>
|
|
public static partial class UmbracoBuilderExtensions
|
|
{
|
|
private static IUmbracoBuilder AddUmbracoOptions<TOptions>(this IUmbracoBuilder builder, Action<OptionsBuilder<TOptions>>? configure = null)
|
|
where TOptions : class
|
|
{
|
|
var umbracoOptionsAttribute = typeof(TOptions).GetCustomAttribute<UmbracoOptionsAttribute>();
|
|
if (umbracoOptionsAttribute is null)
|
|
{
|
|
throw new ArgumentException($"{typeof(TOptions)} do not have the UmbracoOptionsAttribute.");
|
|
}
|
|
|
|
var optionsBuilder = builder.Services.AddOptions<TOptions>()
|
|
.Bind(
|
|
builder.Config.GetSection(umbracoOptionsAttribute.ConfigurationKey),
|
|
o => o.BindNonPublicProperties = umbracoOptionsAttribute.BindNonPublicProperties)
|
|
.ValidateDataAnnotations();
|
|
|
|
configure?.Invoke(optionsBuilder);
|
|
|
|
return builder;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Add Umbraco configuration services and options
|
|
/// </summary>
|
|
public static IUmbracoBuilder AddConfiguration(this IUmbracoBuilder builder)
|
|
{
|
|
// Register configuration validators.
|
|
builder.Services.AddSingleton<IValidateOptions<ContentSettings>, ContentSettingsValidator>();
|
|
builder.Services.AddSingleton<IValidateOptions<GlobalSettings>, GlobalSettingsValidator>();
|
|
builder.Services.AddSingleton<IValidateOptions<HealthChecksSettings>, HealthChecksSettingsValidator>();
|
|
builder.Services.AddSingleton<IValidateOptions<RequestHandlerSettings>, RequestHandlerSettingsValidator>();
|
|
builder.Services.AddSingleton<IValidateOptions<UnattendedSettings>, UnattendedSettingsValidator>();
|
|
|
|
// Register configuration sections.
|
|
builder
|
|
.AddUmbracoOptions<ModelsBuilderSettings>()
|
|
.AddUmbracoOptions<ActiveDirectorySettings>()
|
|
.AddUmbracoOptions<ContentSettings>()
|
|
.AddUmbracoOptions<CoreDebugSettings>()
|
|
.AddUmbracoOptions<ExceptionFilterSettings>()
|
|
.AddUmbracoOptions<GlobalSettings>(optionsBuilder => optionsBuilder.PostConfigure(options =>
|
|
{
|
|
if (string.IsNullOrEmpty(options.UmbracoMediaPhysicalRootPath))
|
|
{
|
|
options.UmbracoMediaPhysicalRootPath = options.UmbracoMediaPath;
|
|
}
|
|
}))
|
|
.AddUmbracoOptions<HealthChecksSettings>()
|
|
.AddUmbracoOptions<HostingSettings>()
|
|
.AddUmbracoOptions<ImagingSettings>()
|
|
.AddUmbracoOptions<IndexCreatorSettings>()
|
|
.AddUmbracoOptions<KeepAliveSettings>()
|
|
.AddUmbracoOptions<LoggingSettings>()
|
|
.AddUmbracoOptions<MemberPasswordConfigurationSettings>()
|
|
.AddUmbracoOptions<NuCacheSettings>()
|
|
.AddUmbracoOptions<RequestHandlerSettings>()
|
|
.AddUmbracoOptions<RuntimeSettings>()
|
|
.AddUmbracoOptions<SecuritySettings>()
|
|
.AddUmbracoOptions<TourSettings>()
|
|
.AddUmbracoOptions<TypeFinderSettings>()
|
|
.AddUmbracoOptions<UserPasswordConfigurationSettings>()
|
|
.AddUmbracoOptions<WebRoutingSettings>()
|
|
.AddUmbracoOptions<UmbracoPluginSettings>()
|
|
.AddUmbracoOptions<UnattendedSettings>()
|
|
.AddUmbracoOptions<RichTextEditorSettings>()
|
|
.AddUmbracoOptions<BasicAuthSettings>()
|
|
.AddUmbracoOptions<RuntimeMinificationSettings>()
|
|
.AddUmbracoOptions<LegacyPasswordMigrationSettings>()
|
|
.AddUmbracoOptions<PackageMigrationSettings>()
|
|
.AddUmbracoOptions<ContentDashboardSettings>()
|
|
.AddUmbracoOptions<HelpPageSettings>()
|
|
.AddUmbracoOptions<DataTypesSettings>();
|
|
|
|
// Configure connection string and ensure it's updated when the configuration changes
|
|
builder.Services.AddSingleton<IConfigureOptions<ConnectionStrings>, ConfigureConnectionStrings>();
|
|
builder.Services.AddSingleton<IOptionsChangeTokenSource<ConnectionStrings>, ConfigurationChangeTokenSource<ConnectionStrings>>();
|
|
|
|
builder.Services.Configure<InstallDefaultDataSettings>(
|
|
Constants.Configuration.NamedOptions.InstallDefaultData.Languages,
|
|
builder.Config.GetSection($"{Constants.Configuration.ConfigInstallDefaultData}:{Constants.Configuration.NamedOptions.InstallDefaultData.Languages}"));
|
|
builder.Services.Configure<InstallDefaultDataSettings>(
|
|
Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes,
|
|
builder.Config.GetSection($"{Constants.Configuration.ConfigInstallDefaultData}:{Constants.Configuration.NamedOptions.InstallDefaultData.DataTypes}"));
|
|
builder.Services.Configure<InstallDefaultDataSettings>(
|
|
Constants.Configuration.NamedOptions.InstallDefaultData.MediaTypes,
|
|
builder.Config.GetSection($"{Constants.Configuration.ConfigInstallDefaultData}:{Constants.Configuration.NamedOptions.InstallDefaultData.MediaTypes}"));
|
|
builder.Services.Configure<InstallDefaultDataSettings>(
|
|
Constants.Configuration.NamedOptions.InstallDefaultData.MemberTypes,
|
|
builder.Config.GetSection($"{Constants.Configuration.ConfigInstallDefaultData}:{Constants.Configuration.NamedOptions.InstallDefaultData.MemberTypes}"));
|
|
|
|
builder.Services.Configure<RequestHandlerSettings>(options => options.MergeReplacements(builder.Config));
|
|
|
|
return builder;
|
|
}
|
|
}
|