using System;
using System.Collections.Generic;
using System.Reflection;
using Microsoft.Extensions.Configuration;
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
{
///
/// Extension methods for
///
public static partial class UmbracoBuilderExtensions
{
private static IUmbracoBuilder AddUmbracoOptions(this IUmbracoBuilder builder, Action>? configure = null)
where TOptions : class
{
var umbracoOptionsAttribute = typeof(TOptions).GetCustomAttribute();
if (umbracoOptionsAttribute is null)
{
throw new ArgumentException($"{typeof(TOptions)} do not have the UmbracoOptionsAttribute.");
}
var optionsBuilder = builder.Services.AddOptions()
.Bind(
builder.Config.GetSection(umbracoOptionsAttribute.ConfigurationKey),
o => o.BindNonPublicProperties = umbracoOptionsAttribute.BindNonPublicProperties
)
.ValidateDataAnnotations();
configure?.Invoke(optionsBuilder);
return builder;
}
///
/// Add Umbraco configuration services and options
///
public static IUmbracoBuilder AddConfiguration(this IUmbracoBuilder builder)
{
// Register configuration validators.
builder.Services.AddSingleton, ContentSettingsValidator>();
builder.Services.AddSingleton, GlobalSettingsValidator>();
builder.Services.AddSingleton, HealthChecksSettingsValidator>();
builder.Services.AddSingleton, RequestHandlerSettingsValidator>();
builder.Services.AddSingleton, UnattendedSettingsValidator>();
// Register configuration sections.
builder
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions(optionsBuilder => optionsBuilder.PostConfigure(options =>
{
if (string.IsNullOrEmpty(options.UmbracoMediaPhysicalRootPath))
{
options.UmbracoMediaPhysicalRootPath = options.UmbracoMediaPath;
}
}))
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions()
.AddUmbracoOptions();
builder.Services.AddSingleton, ConfigureConnectionStrings>();
builder.Services.Configure(options => options.MergeReplacements(builder.Config));
return builder;
}
}
}