diff --git a/src/Umbraco.Core/Constants-Configuration.cs b/src/Umbraco.Core/Constants-Configuration.cs index 11694fa5c0..bc4c29cfa6 100644 --- a/src/Umbraco.Core/Constants-Configuration.cs +++ b/src/Umbraco.Core/Constants-Configuration.cs @@ -41,6 +41,7 @@ public static partial class Constants public const string ConfigLogging = ConfigPrefix + "Logging"; public const string ConfigMemberPassword = ConfigPrefix + "Security:MemberPassword"; public const string ConfigModelsBuilder = ConfigPrefix + "ModelsBuilder"; + public const string ConfigModelsMode = ConfigModelsBuilder + ":ModelsMode"; public const string ConfigNuCache = ConfigPrefix + "NuCache"; public const string ConfigPlugins = ConfigPrefix + "Plugins"; public const string ConfigRequestHandler = ConfigPrefix + "RequestHandler"; diff --git a/src/Umbraco.Core/Extensions/ConfigurationExtensions.cs b/src/Umbraco.Core/Extensions/ConfigurationExtensions.cs index 2003079736..2bdc75c7b1 100644 --- a/src/Umbraco.Core/Extensions/ConfigurationExtensions.cs +++ b/src/Umbraco.Core/Extensions/ConfigurationExtensions.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Configuration; using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Configuration; using Umbraco.Cms.Core.Configuration.Models; namespace Umbraco.Extensions; @@ -101,4 +102,7 @@ public static class ConfigurationExtensions /// public static RuntimeMode GetRuntimeMode(this IConfiguration configuration) => configuration.GetValue(Constants.Configuration.ConfigRuntimeMode); + + public static ModelsMode GetModelsMode(this IConfiguration configuration) => + configuration.GetValue(Constants.Configuration.ConfigModelsMode); } diff --git a/src/Umbraco.Web.Common/ModelsBuilder/DependencyInjection/UmbracoBuilderDependencyInjectionExtensions.cs b/src/Umbraco.Web.Common/ModelsBuilder/DependencyInjection/UmbracoBuilderDependencyInjectionExtensions.cs index 7e79d8787d..48a4478dc4 100644 --- a/src/Umbraco.Web.Common/ModelsBuilder/DependencyInjection/UmbracoBuilderDependencyInjectionExtensions.cs +++ b/src/Umbraco.Web.Common/ModelsBuilder/DependencyInjection/UmbracoBuilderDependencyInjectionExtensions.cs @@ -140,35 +140,27 @@ public static class UmbracoBuilderDependencyInjectionExtensions return builder; } + // See notes in RefreshingRazorViewEngine for information on what this is doing. private static IUmbracoBuilder AddInMemoryModelsRazorEngine(this IUmbracoBuilder builder) { - // See notes in RefreshingRazorViewEngine for information on what this is doing. + // We should only add/replace these services when models builder is InMemory, otherwise we'll cause issues. + // Since these services expect the ModelsMode to be InMemoryAuto + if (builder.Config.GetModelsMode() is ModelsMode.InMemoryAuto) + { + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); - // copy the current collection, we need to use this later to rebuild a container - // to re-create the razor compiler provider - builder.Services.AddSingleton(); - builder.Services.AddSingleton(); - builder.Services.AddSingleton(); - builder.Services.AddSingleton(); - builder.Services.AddSingleton(); - - builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + // Register the factory as IPublishedModelFactory + builder.Services.AddSingleton(); + return builder; + } // This is what the community MB would replace, all of the above services are fine to be registered - // even if the community MB is in place. - builder.Services.AddSingleton(factory => - { - ModelsBuilderSettings modelsBuilderSettings = factory.GetRequiredService>().Value; - if (modelsBuilderSettings.ModelsMode == ModelsMode.InMemoryAuto) - { - return factory.GetRequiredService(); - } - else - { - return factory.CreateDefaultPublishedModelFactory(); - } - }); - + builder.Services.AddSingleton(factory => factory.CreateDefaultPublishedModelFactory()); return builder; } } diff --git a/templates/UmbracoPackage/.template.config/template.json b/templates/UmbracoPackage/.template.config/template.json index d5aeaf7a82..36c93da093 100644 --- a/templates/UmbracoPackage/.template.config/template.json +++ b/templates/UmbracoPackage/.template.config/template.json @@ -28,13 +28,13 @@ "datatype": "choice", "choices": [ { - "displayName": ".NET 6.0", - "description": "Target net6.0", - "choice": "net6.0" + "displayName": ".NET 7.0", + "description": "Target net7.0", + "choice": "net7.0" } ], - "defaultValue": "net6.0", - "replaces": "net6.0" + "defaultValue": "net7.0", + "replaces": "net7.0" }, "UmbracoVersion": { "displayName": "Umbraco version", diff --git a/templates/UmbracoProject/.template.config/template.json b/templates/UmbracoProject/.template.config/template.json index 6476fb1568..befe6d7e5a 100644 --- a/templates/UmbracoProject/.template.config/template.json +++ b/templates/UmbracoProject/.template.config/template.json @@ -38,13 +38,13 @@ "datatype": "choice", "choices": [ { - "displayName": ".NET 6.0", - "description": "Target net6.0", - "choice": "net6.0" + "displayName": ".NET 7.0", + "description": "Target net7.0", + "choice": "net7.0" } ], - "defaultValue": "net6.0", - "replaces": "net6.0" + "defaultValue": "net7.0", + "replaces": "net7.0" }, "UmbracoVersion": { "displayName": "Umbraco version",