Skip to content

Commit f0866d3

Browse files
committed
Merge remote-tracking branch 'origin/v11/dev' into v11/dev
2 parents 773262c + f7a26f5 commit f0866d3

File tree

3 files changed

+22
-25
lines changed

3 files changed

+22
-25
lines changed

src/Umbraco.Core/Constants-Configuration.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public static class Configuration
4141
public const string ConfigLogging = ConfigPrefix + "Logging";
4242
public const string ConfigMemberPassword = ConfigPrefix + "Security:MemberPassword";
4343
public const string ConfigModelsBuilder = ConfigPrefix + "ModelsBuilder";
44+
public const string ConfigModelsMode = ConfigModelsBuilder + ":ModelsMode";
4445
public const string ConfigNuCache = ConfigPrefix + "NuCache";
4546
public const string ConfigPlugins = ConfigPrefix + "Plugins";
4647
public const string ConfigRequestHandler = ConfigPrefix + "RequestHandler";

src/Umbraco.Core/Extensions/ConfigurationExtensions.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Microsoft.Extensions.Configuration;
22
using Umbraco.Cms.Core;
3+
using Umbraco.Cms.Core.Configuration;
34
using Umbraco.Cms.Core.Configuration.Models;
45

56
namespace Umbraco.Extensions;
@@ -101,4 +102,7 @@ public static class ConfigurationExtensions
101102
/// </returns>
102103
public static RuntimeMode GetRuntimeMode(this IConfiguration configuration)
103104
=> configuration.GetValue<RuntimeMode>(Constants.Configuration.ConfigRuntimeMode);
105+
106+
public static ModelsMode GetModelsMode(this IConfiguration configuration) =>
107+
configuration.GetValue<ModelsMode>(Constants.Configuration.ConfigModelsMode);
104108
}

src/Umbraco.Web.Common/ModelsBuilder/DependencyInjection/UmbracoBuilderDependencyInjectionExtensions.cs

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -140,35 +140,27 @@ public static IUmbracoBuilder AddModelsBuilder(this IUmbracoBuilder builder)
140140
return builder;
141141
}
142142

143+
// See notes in RefreshingRazorViewEngine for information on what this is doing.
143144
private static IUmbracoBuilder AddInMemoryModelsRazorEngine(this IUmbracoBuilder builder)
144145
{
145-
// See notes in RefreshingRazorViewEngine for information on what this is doing.
146-
147-
// copy the current collection, we need to use this later to rebuild a container
148-
// to re-create the razor compiler provider
149-
builder.Services.AddSingleton<UmbracoRazorReferenceManager>();
150-
builder.Services.AddSingleton<CompilationOptionsProvider>();
151-
builder.Services.AddSingleton<IViewCompilerProvider, UmbracoViewCompilerProvider>();
152-
builder.Services.AddSingleton<RuntimeCompilationCacheBuster>();
153-
builder.Services.AddSingleton<InMemoryAssemblyLoadContextManager>();
154-
155-
builder.Services.AddSingleton<InMemoryModelFactory>();
156-
157-
// This is what the community MB would replace, all of the above services are fine to be registered
158-
// even if the community MB is in place.
159-
builder.Services.AddSingleton<IPublishedModelFactory>(factory =>
146+
// We should only add/replace these services when models builder is InMemory, otherwise we'll cause issues.
147+
// Since these services expect the ModelsMode to be InMemoryAuto
148+
if (builder.Config.GetModelsMode() is ModelsMode.InMemoryAuto)
160149
{
161-
ModelsBuilderSettings modelsBuilderSettings = factory.GetRequiredService<IOptions<ModelsBuilderSettings>>().Value;
162-
if (modelsBuilderSettings.ModelsMode == ModelsMode.InMemoryAuto)
163-
{
164-
return factory.GetRequiredService<InMemoryModelFactory>();
165-
}
166-
else
167-
{
168-
return factory.CreateDefaultPublishedModelFactory();
169-
}
170-
});
150+
builder.Services.AddSingleton<UmbracoRazorReferenceManager>();
151+
builder.Services.AddSingleton<CompilationOptionsProvider>();
152+
builder.Services.AddSingleton<IViewCompilerProvider, UmbracoViewCompilerProvider>();
153+
builder.Services.AddSingleton<RuntimeCompilationCacheBuster>();
154+
builder.Services.AddSingleton<InMemoryAssemblyLoadContextManager>();
155+
156+
builder.Services.AddSingleton<InMemoryModelFactory>();
157+
// Register the factory as IPublishedModelFactory
158+
builder.Services.AddSingleton<IPublishedModelFactory, InMemoryModelFactory>();
159+
return builder;
160+
}
171161

162+
// This is what the community MB would replace, all of the above services are fine to be registered
163+
builder.Services.AddSingleton<IPublishedModelFactory>(factory => factory.CreateDefaultPublishedModelFactory());
172164
return builder;
173165
}
174166
}

0 commit comments

Comments
 (0)