diff --git a/src/JsonSchema/JsonSchema.csproj b/src/JsonSchema/JsonSchema.csproj new file mode 100644 index 0000000000..c1c02ec32f --- /dev/null +++ b/src/JsonSchema/JsonSchema.csproj @@ -0,0 +1,19 @@ + + + + Exe + net5.0 + true + + + + + + + + + + + + + diff --git a/src/JsonSchema/Program.cs b/src/JsonSchema/Program.cs new file mode 100644 index 0000000000..e8cc1548e5 --- /dev/null +++ b/src/JsonSchema/Program.cs @@ -0,0 +1,57 @@ +using System; +using System.Threading.Tasks; +using CommandLine; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using NJsonSchema; +using NJsonSchema.Generation; + +namespace JsonSchema +{ + class Program + { + public class Options + { + [Option('o', "outputFile", Required = false, HelpText = "Set path of the output file.")] + public string OutputFile { get; set; } + } + + static async Task Main(string[] args) + { + Parser.Default.ParseArguments(args) + .WithParsedAsync(Execute); + } + + private static async Task Execute(Options options) + { + var result = GenerateJsonSchema(); + + if (string.IsNullOrEmpty(options.OutputFile)) + { + Console.WriteLine(result); + } + else + { + await System.IO.File.WriteAllTextAsync(options.OutputFile, result); + } + } + + private static string GenerateJsonSchema() + { + var settings = new JsonSchemaGeneratorSettings() + { + SchemaType = SchemaType.JsonSchema, + AlwaysAllowAdditionalObjectProperties = true, + SerializerSettings = new JsonSerializerSettings(), + TypeNameGenerator = new UmbracoPrefixedTypeNameGenerator() + }; + settings.SerializerSettings.Converters.Add(new StringEnumConverter()); + + var generator = new JsonSchemaGenerator(settings); + + var schema = generator.Generate(typeof(UmbracoCmsConfigRoot)); + + return schema.ToJson(Formatting.Indented); + } + } +} diff --git a/src/JsonSchema/UmbracoCmsConfigRoot.cs b/src/JsonSchema/UmbracoCmsConfigRoot.cs new file mode 100644 index 0000000000..3f4f2d4ab3 --- /dev/null +++ b/src/JsonSchema/UmbracoCmsConfigRoot.cs @@ -0,0 +1,53 @@ +using Umbraco.Cms.Core.Configuration.Models; + +namespace JsonSchema +{ + /// + /// Configuration of Open Source .NET CMS - Umbraco + /// + public class UmbracoCmsConfigRoot + { + public Cms CMS { get; set; } + + + /// + /// Configurations for the Umbraco CMS + /// + public class Cms + { + public ActiveDirectorySettings ActiveDirectory { get; set; } + public ContentSettings Content { get; set; } + public CoreDebugSettings CoreDebug { get; set; } + public ExceptionFilterSettings ExceptionFilter { get; set; } + public ModelsBuilderSettings ModelsBuilder { get; set; } + public GlobalSettings Global { get; set; } + public HealthChecksSettings HealthChecks { get; set; } + public HostingSettings Hosting { get; set; } + public ImagingSettings Imaging { get; set; } + public IndexCreatorSettings Examine { get; set; } + public KeepAliveSettings KeepAlive { get; set; } + public LoggingSettings Logging { get; set; } + public MemberPasswordConfigurationSettings MemberPassword { get; set; } + public NuCacheSettings NuCache { get; set; } + public RequestHandlerSettings RequestHandler { get; set; } + public RuntimeSettings Runtime { get; set; } + public SecuritySettings Security { get; set; } + public TourSettings Tours { get; set; } + public TypeFinderSettings TypeFinder { get; set; } + public UserPasswordConfigurationSettings UserPassword { get; set; } + public WebRoutingSettings WebRouting { get; set; } + public UmbracoPluginSettings Plugins { get; set; } + public UnattendedSettings Unattended { get; set; } + public RichTextEditorSettings RichTextEditor { get; set; } + public RuntimeMinificationSettings RuntimeMinification { get; set; } + } + + /// + /// Configurations for the Umbraco Forms package to Umbraco CMS + /// + public class Forms + { + + } + } +} diff --git a/src/JsonSchema/UmbracoPrefixedTypeNameGenerator.cs b/src/JsonSchema/UmbracoPrefixedTypeNameGenerator.cs new file mode 100644 index 0000000000..b8a7233665 --- /dev/null +++ b/src/JsonSchema/UmbracoPrefixedTypeNameGenerator.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using NJsonSchema; + +namespace JsonSchema +{ + public class UmbracoPrefixedTypeNameGenerator : DefaultTypeNameGenerator + { + private const string PREFIX = "umbraco"; + + public override string Generate(NJsonSchema.JsonSchema schema, string typeNameHint, IEnumerable reservedTypeNames) + { + return PREFIX + base.Generate(schema, typeNameHint, reservedTypeNames); + } + } +} diff --git a/src/Umbraco.Core/Configuration/Models/ActiveDirectorySettings.cs b/src/Umbraco.Core/Configuration/Models/ActiveDirectorySettings.cs index 700e3fe3e1..be06d33ba2 100644 --- a/src/Umbraco.Core/Configuration/Models/ActiveDirectorySettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ActiveDirectorySettings.cs @@ -1,11 +1,14 @@ // Copyright (c) Umbraco. // See LICENSE for more details. +using Umbraco.Cms.Core.Configuration.Models; + namespace Umbraco.Cms.Core.Configuration.Models { /// /// Typed configuration options for active directory settings. /// + [UmbracoOptions(Constants.Configuration.ConfigActiveDirectory)] public class ActiveDirectorySettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/Attributes/UmbracoOptionsAttribute.cs b/src/Umbraco.Core/Configuration/Models/Attributes/UmbracoOptionsAttribute.cs new file mode 100644 index 0000000000..211b6b3d83 --- /dev/null +++ b/src/Umbraco.Core/Configuration/Models/Attributes/UmbracoOptionsAttribute.cs @@ -0,0 +1,16 @@ +using System; + +namespace Umbraco.Cms.Core.Configuration.Models +{ + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] + public class UmbracoOptionsAttribute : Attribute + { + public string ConfigurationKey { get; } + public bool BindNonPublicProperties { get; set; } + + public UmbracoOptionsAttribute(string configurationKey) + { + ConfigurationKey = configurationKey; + } + } +} diff --git a/src/Umbraco.Core/Configuration/Models/ConnectionStrings.cs b/src/Umbraco.Core/Configuration/Models/ConnectionStrings.cs index 9e6ab4cff1..739c309f80 100644 --- a/src/Umbraco.Core/Configuration/Models/ConnectionStrings.cs +++ b/src/Umbraco.Core/Configuration/Models/ConnectionStrings.cs @@ -1,11 +1,14 @@ // Copyright (c) Umbraco. // See LICENSE for more details. +using Umbraco.Cms.Core.Configuration.Models; + namespace Umbraco.Cms.Core.Configuration.Models { /// /// Typed configuration options for connection strings. /// + [UmbracoOptions("ConnectionStrings", BindNonPublicProperties = true)] public class ConnectionStrings { // Backing field for UmbracoConnectionString to load from configuration value with key umbracoDbDSN. diff --git a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs index 7da55cca99..1c54593ed2 100644 --- a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs @@ -10,6 +10,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for content settings. /// + [UmbracoOptions(Constants.Configuration.ConfigContent)] public class ContentSettings { private const string DefaultPreviewBadge = diff --git a/src/Umbraco.Core/Configuration/Models/CoreDebugSettings.cs b/src/Umbraco.Core/Configuration/Models/CoreDebugSettings.cs index 1978e02f18..626a4c68f7 100644 --- a/src/Umbraco.Core/Configuration/Models/CoreDebugSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/CoreDebugSettings.cs @@ -6,6 +6,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for core debug settings. /// + [UmbracoOptions(Constants.Configuration.ConfigCoreDebug)] public class CoreDebugSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/ExceptionFilterSettings.cs b/src/Umbraco.Core/Configuration/Models/ExceptionFilterSettings.cs index 0a6bc32351..0a58036104 100644 --- a/src/Umbraco.Core/Configuration/Models/ExceptionFilterSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ExceptionFilterSettings.cs @@ -6,6 +6,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for exception filter settings. /// + [UmbracoOptions(Constants.Configuration.ConfigExceptionFilter)] public class ExceptionFilterSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/GlobalSettings.cs b/src/Umbraco.Core/Configuration/Models/GlobalSettings.cs index b27b60ec8e..5c6e53df92 100644 --- a/src/Umbraco.Core/Configuration/Models/GlobalSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/GlobalSettings.cs @@ -8,6 +8,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for global settings. /// + [UmbracoOptions(Constants.Configuration.ConfigGlobal)] public class GlobalSettings { internal const string diff --git a/src/Umbraco.Core/Configuration/Models/HealthChecksSettings.cs b/src/Umbraco.Core/Configuration/Models/HealthChecksSettings.cs index ba7ccf1371..0d232b9a9b 100644 --- a/src/Umbraco.Core/Configuration/Models/HealthChecksSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/HealthChecksSettings.cs @@ -9,6 +9,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for healthchecks settings. /// + [UmbracoOptions(Constants.Configuration.ConfigHealthChecks)] public class HealthChecksSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/HostingSettings.cs b/src/Umbraco.Core/Configuration/Models/HostingSettings.cs index 981cf8a6db..0017611fc0 100644 --- a/src/Umbraco.Core/Configuration/Models/HostingSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/HostingSettings.cs @@ -6,6 +6,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for hosting settings. /// + [UmbracoOptions(Constants.Configuration.ConfigHosting)] public class HostingSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/ImagingSettings.cs b/src/Umbraco.Core/Configuration/Models/ImagingSettings.cs index 273e53f384..fde303343c 100644 --- a/src/Umbraco.Core/Configuration/Models/ImagingSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ImagingSettings.cs @@ -6,6 +6,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for imaging settings. /// + [UmbracoOptions(Constants.Configuration.ConfigImaging)] public class ImagingSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/IndexCreatorSettings.cs b/src/Umbraco.Core/Configuration/Models/IndexCreatorSettings.cs index 52a40b0ee4..c140463b4a 100644 --- a/src/Umbraco.Core/Configuration/Models/IndexCreatorSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/IndexCreatorSettings.cs @@ -8,6 +8,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for index creator settings. /// + [UmbracoOptions(Constants.Configuration.ConfigExamine)] public class IndexCreatorSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/KeepAliveSettings.cs b/src/Umbraco.Core/Configuration/Models/KeepAliveSettings.cs index 898798588c..14c2a29f93 100644 --- a/src/Umbraco.Core/Configuration/Models/KeepAliveSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/KeepAliveSettings.cs @@ -9,6 +9,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for keep alive settings. /// + [UmbracoOptions(Constants.Configuration.ConfigKeepAlive)] public class KeepAliveSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/LoggingSettings.cs b/src/Umbraco.Core/Configuration/Models/LoggingSettings.cs index 3f762e7577..b9d6fd2897 100644 --- a/src/Umbraco.Core/Configuration/Models/LoggingSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/LoggingSettings.cs @@ -8,6 +8,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for logging settings. /// + [UmbracoOptions(Constants.Configuration.ConfigLogging)] public class LoggingSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/MemberPasswordConfigurationSettings.cs b/src/Umbraco.Core/Configuration/Models/MemberPasswordConfigurationSettings.cs index 708a7e476d..84bfeb3d3d 100644 --- a/src/Umbraco.Core/Configuration/Models/MemberPasswordConfigurationSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/MemberPasswordConfigurationSettings.cs @@ -6,6 +6,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for member password settings. /// + [UmbracoOptions(Constants.Configuration.ConfigMemberPassword)] public class MemberPasswordConfigurationSettings : IPasswordConfiguration { /// diff --git a/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs b/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs index 76e7adc4b4..ea2fa0623e 100644 --- a/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs @@ -1,6 +1,7 @@ // Copyright (c) Umbraco. // See LICENSE for more details. +using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Extensions; namespace Umbraco.Cms.Core.Configuration.Models @@ -8,6 +9,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for models builder settings. /// + [UmbracoOptions(Constants.Configuration.ConfigModelsBuilder, BindNonPublicProperties = true)] public class ModelsBuilderSettings { private bool _flagOutOfDateModels = true; diff --git a/src/Umbraco.Core/Configuration/Models/NuCacheSettings.cs b/src/Umbraco.Core/Configuration/Models/NuCacheSettings.cs index aa67038702..e09d6adb24 100644 --- a/src/Umbraco.Core/Configuration/Models/NuCacheSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/NuCacheSettings.cs @@ -6,6 +6,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for NuCache settings. /// + [UmbracoOptions(Constants.Configuration.ConfigNuCache)] public class NuCacheSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/RequestHandlerSettings.cs b/src/Umbraco.Core/Configuration/Models/RequestHandlerSettings.cs index 5f5032f7c3..6f6a9c6236 100644 --- a/src/Umbraco.Core/Configuration/Models/RequestHandlerSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/RequestHandlerSettings.cs @@ -10,6 +10,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for request handler settings. /// + [UmbracoOptions(Constants.Configuration.ConfigRequestHandler)] public class RequestHandlerSettings { internal static readonly CharItem[] DefaultCharCollection = diff --git a/src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs b/src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs index cdd88ca409..a5d1ae7475 100644 --- a/src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs @@ -3,6 +3,7 @@ using Umbraco.Cms.Core.Models.ContentEditing; namespace Umbraco.Cms.Core.Configuration.Models { + [UmbracoOptions(Constants.Configuration.ConfigRichTextEditor)] public class RichTextEditorSettings { private static readonly string[] s_default_plugins = new[] diff --git a/src/Umbraco.Core/Configuration/Models/RuntimeMinificationSettings.cs b/src/Umbraco.Core/Configuration/Models/RuntimeMinificationSettings.cs index fa3519059a..f0fd4e71e1 100644 --- a/src/Umbraco.Core/Configuration/Models/RuntimeMinificationSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/RuntimeMinificationSettings.cs @@ -4,6 +4,7 @@ using System.Text; namespace Umbraco.Cms.Core.Configuration.Models { + [UmbracoOptions(Constants.Configuration.ConfigRuntimeMinification)] public class RuntimeMinificationSettings { public bool UseInMemoryCache { get; set; } = false; diff --git a/src/Umbraco.Core/Configuration/Models/RuntimeSettings.cs b/src/Umbraco.Core/Configuration/Models/RuntimeSettings.cs index c598dfb86b..64625f153b 100644 --- a/src/Umbraco.Core/Configuration/Models/RuntimeSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/RuntimeSettings.cs @@ -6,6 +6,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for runtime settings. /// + [UmbracoOptions(Constants.Configuration.ConfigRuntime)] public class RuntimeSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/SecuritySettings.cs b/src/Umbraco.Core/Configuration/Models/SecuritySettings.cs index a20e42ed08..392e5f2118 100644 --- a/src/Umbraco.Core/Configuration/Models/SecuritySettings.cs +++ b/src/Umbraco.Core/Configuration/Models/SecuritySettings.cs @@ -6,6 +6,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for security settings. /// + [UmbracoOptions(Constants.Configuration.ConfigSecurity)] public class SecuritySettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/TourSettings.cs b/src/Umbraco.Core/Configuration/Models/TourSettings.cs index c61c2316b7..c73c4737b8 100644 --- a/src/Umbraco.Core/Configuration/Models/TourSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/TourSettings.cs @@ -6,6 +6,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for tour settings. /// + [UmbracoOptions(Constants.Configuration.ConfigTours)] public class TourSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/TypeFinderSettings.cs b/src/Umbraco.Core/Configuration/Models/TypeFinderSettings.cs index 9c8fc2b9d3..d942f47b4f 100644 --- a/src/Umbraco.Core/Configuration/Models/TypeFinderSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/TypeFinderSettings.cs @@ -6,6 +6,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for type finder settings. /// + [UmbracoOptions(Constants.Configuration.ConfigTypeFinder)] public class TypeFinderSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/UmbracoPluginSettings.cs b/src/Umbraco.Core/Configuration/Models/UmbracoPluginSettings.cs index 6dcad67ce2..19bab8141d 100644 --- a/src/Umbraco.Core/Configuration/Models/UmbracoPluginSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/UmbracoPluginSettings.cs @@ -8,6 +8,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for the plugins. /// + [UmbracoOptions(Constants.Configuration.ConfigPlugins)] public class UmbracoPluginSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/UnattendedSettings.cs b/src/Umbraco.Core/Configuration/Models/UnattendedSettings.cs index 26c3ee72c4..00c0be4b3b 100644 --- a/src/Umbraco.Core/Configuration/Models/UnattendedSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/UnattendedSettings.cs @@ -6,6 +6,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for unattended settings. /// + [UmbracoOptions(Constants.Configuration.ConfigUnattended)] public class UnattendedSettings { /// diff --git a/src/Umbraco.Core/Configuration/Models/UserPasswordConfigurationSettings.cs b/src/Umbraco.Core/Configuration/Models/UserPasswordConfigurationSettings.cs index f609181460..ccc9129a1c 100644 --- a/src/Umbraco.Core/Configuration/Models/UserPasswordConfigurationSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/UserPasswordConfigurationSettings.cs @@ -6,6 +6,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for user password settings. /// + [UmbracoOptions(Constants.Configuration.ConfigUserPassword)] public class UserPasswordConfigurationSettings : IPasswordConfiguration { /// diff --git a/src/Umbraco.Core/Configuration/Models/WebRoutingSettings.cs b/src/Umbraco.Core/Configuration/Models/WebRoutingSettings.cs index 2fe33603ca..3c1c372c00 100644 --- a/src/Umbraco.Core/Configuration/Models/WebRoutingSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/WebRoutingSettings.cs @@ -8,6 +8,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Typed configuration options for web routing settings. /// + [UmbracoOptions(Constants.Configuration.ConfigWebRouting)] public class WebRoutingSettings { /// diff --git a/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Configuration.cs b/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Configuration.cs index bd834a5427..b5edfdf818 100644 --- a/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Configuration.cs +++ b/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Configuration.cs @@ -1,3 +1,5 @@ +using System; +using System.Reflection; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; @@ -11,12 +13,25 @@ namespace Umbraco.Cms.Core.DependencyInjection public static partial class UmbracoBuilderExtensions { - private static OptionsBuilder AddOptions(IUmbracoBuilder builder, string key) + private static IUmbracoBuilder AddUmbracoOptions(this IUmbracoBuilder builder) where TOptions : class - => builder.Services.AddOptions() - .Bind(builder.Config.GetSection(key)) + { + var umbracoOptionsAttribute = typeof(TOptions).GetCustomAttribute(); + + if (umbracoOptionsAttribute is null) + { + throw new ArgumentException("typeof(TOptions) do not have the UmbracoOptionsAttribute"); + } + + + builder.Services.AddOptions() + .Bind(builder.Config.GetSection(umbracoOptionsAttribute.ConfigurationKey), + o => o.BindNonPublicProperties = umbracoOptionsAttribute.BindNonPublicProperties) .ValidateDataAnnotations(); + return builder; + } + /// /// Add Umbraco configuration services and options /// @@ -30,34 +45,33 @@ namespace Umbraco.Cms.Core.DependencyInjection builder.Services.AddSingleton, UnattendedSettingsValidator>(); // Register configuration sections. - - builder.Services.Configure(builder.Config.GetSection(Constants.Configuration.ConfigModelsBuilder), o => o.BindNonPublicProperties = true); - builder.Services.Configure(builder.Config.GetSection("ConnectionStrings"), o => o.BindNonPublicProperties = true); - - AddOptions(builder, Constants.Configuration.ConfigActiveDirectory); - AddOptions(builder, Constants.Configuration.ConfigContent); - AddOptions(builder, Constants.Configuration.ConfigCoreDebug); - AddOptions(builder, Constants.Configuration.ConfigExceptionFilter); - AddOptions(builder, Constants.Configuration.ConfigGlobal); - AddOptions(builder, Constants.Configuration.ConfigHealthChecks); - AddOptions(builder, Constants.Configuration.ConfigHosting); - AddOptions(builder, Constants.Configuration.ConfigImaging); - AddOptions(builder, Constants.Configuration.ConfigExamine); - AddOptions(builder, Constants.Configuration.ConfigKeepAlive); - AddOptions(builder, Constants.Configuration.ConfigLogging); - AddOptions(builder, Constants.Configuration.ConfigMemberPassword); - AddOptions(builder, Constants.Configuration.ConfigNuCache); - AddOptions(builder, Constants.Configuration.ConfigRequestHandler); - AddOptions(builder, Constants.Configuration.ConfigRuntime); - AddOptions(builder, Constants.Configuration.ConfigSecurity); - AddOptions(builder, Constants.Configuration.ConfigTours); - AddOptions(builder, Constants.Configuration.ConfigTypeFinder); - AddOptions(builder, Constants.Configuration.ConfigUserPassword); - AddOptions(builder, Constants.Configuration.ConfigWebRouting); - AddOptions(builder, Constants.Configuration.ConfigPlugins); - AddOptions(builder, Constants.Configuration.ConfigUnattended); - AddOptions(builder, Constants.Configuration.ConfigRichTextEditor); - AddOptions(builder, Constants.Configuration.ConfigRuntimeMinification); + builder + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions() + .AddUmbracoOptions(); return builder; } diff --git a/src/umbraco.sln b/src/umbraco.sln index b021dfccff..5093492d07 100644 --- a/src/umbraco.sln +++ b/src/umbraco.sln @@ -160,6 +160,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Tests.UnitTests", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Web.Common", "Umbraco.Web.Common\Umbraco.Web.Common.csproj", "{79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JsonSchema", "JsonSchema\JsonSchema.csproj", "{2A5027D9-F71D-4957-929E-F7A56AA1B95A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -234,6 +236,10 @@ Global {79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}.Debug|Any CPU.Build.0 = Debug|Any CPU {79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}.Release|Any CPU.ActiveCfg = Release|Any CPU {79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}.Release|Any CPU.Build.0 = Release|Any CPU + {2A5027D9-F71D-4957-929E-F7A56AA1B95A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2A5027D9-F71D-4957-929E-F7A56AA1B95A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2A5027D9-F71D-4957-929E-F7A56AA1B95A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2A5027D9-F71D-4957-929E-F7A56AA1B95A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE