diff --git a/src/Umbraco.Core/Composing/Composers.cs b/src/Umbraco.Core/Composing/Composers.cs index 880b91c61b..31c02a08fe 100644 --- a/src/Umbraco.Core/Composing/Composers.cs +++ b/src/Umbraco.Core/Composing/Composers.cs @@ -103,18 +103,7 @@ namespace Umbraco.Core.Composing internal Dictionary> GetRequirements(bool throwOnMissing = true) { // create a list, remove those that cannot be enabled due to runtime level - var composerTypeList = _composerTypes - .Where(x => - { - // use the min/max levels specified by the attribute if any - // otherwise, min: user composers are Run, anything else is Unknown (always run) - // max: everything is Run (always run) - var attr = x.GetCustomAttribute(); - var minLevel = attr?.MinLevel ?? (x.Implements() ? RuntimeLevel.Run : RuntimeLevel.Unknown); - var maxLevel = attr?.MaxLevel ?? RuntimeLevel.Run; - return _composition.RuntimeState.Level >= minLevel && _composition.RuntimeState.Level <= maxLevel; - }) - .ToList(); + var composerTypeList = _composerTypes.ToList(); // enable or disable composers EnableDisableComposers(_enableDisableAttributes, composerTypeList); diff --git a/src/Umbraco.Core/Composing/RuntimeLevelAttribute.cs b/src/Umbraco.Core/Composing/RuntimeLevelAttribute.cs deleted file mode 100644 index 5de90ee8e8..0000000000 --- a/src/Umbraco.Core/Composing/RuntimeLevelAttribute.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; - -namespace Umbraco.Core.Composing -{ - /// - /// Marks a composer to indicate a minimum and/or maximum runtime level for which the composer would compose. - /// - [AttributeUsage(AttributeTargets.Class /*, AllowMultiple = false, Inherited = true*/)] - public class RuntimeLevelAttribute : Attribute - { - /// - /// Gets or sets the minimum runtime level for which the composer would compose. - /// - public RuntimeLevel MinLevel { get; set; } = RuntimeLevel.Install; - - /// - /// Gets or sets the maximum runtime level for which the composer would compose. - /// - public RuntimeLevel MaxLevel { get; set; } = RuntimeLevel.Run; - } -} diff --git a/src/Umbraco.Examine.Lucene/ExamineLuceneComposer.cs b/src/Umbraco.Examine.Lucene/ExamineLuceneComposer.cs index b0da33569c..5df99d86fb 100644 --- a/src/Umbraco.Examine.Lucene/ExamineLuceneComposer.cs +++ b/src/Umbraco.Examine.Lucene/ExamineLuceneComposer.cs @@ -6,7 +6,6 @@ namespace Umbraco.Examine { // We want to run after core composers since we are replacing some items [ComposeAfter(typeof(ICoreComposer))] - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public sealed class ExamineLuceneComposer : ComponentComposer { public override void Compose(Composition composition) diff --git a/src/Umbraco.Examine.Lucene/ExamineLuceneFinalComposer.cs b/src/Umbraco.Examine.Lucene/ExamineLuceneFinalComposer.cs index 1a73426568..8f3656f67c 100644 --- a/src/Umbraco.Examine.Lucene/ExamineLuceneFinalComposer.cs +++ b/src/Umbraco.Examine.Lucene/ExamineLuceneFinalComposer.cs @@ -1,5 +1,4 @@ -using Umbraco.Core; -using Umbraco.Core.Composing; +using Umbraco.Core.Composing; namespace Umbraco.Examine { @@ -7,7 +6,6 @@ namespace Umbraco.Examine // and *also* after ICoreComposer (in case IUserComposer is disabled) [ComposeAfter(typeof(IUserComposer))] [ComposeAfter(typeof(ICoreComposer))] - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public class ExamineLuceneFinalComposer : ComponentComposer { } } diff --git a/src/Umbraco.Infrastructure/Cache/DistributedCacheBinderComposer.cs b/src/Umbraco.Infrastructure/Cache/DistributedCacheBinderComposer.cs index 3e99d453fa..603819534f 100644 --- a/src/Umbraco.Infrastructure/Cache/DistributedCacheBinderComposer.cs +++ b/src/Umbraco.Infrastructure/Cache/DistributedCacheBinderComposer.cs @@ -6,7 +6,6 @@ namespace Umbraco.Web.Cache /// /// Installs listeners on service events in order to refresh our caches. /// - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] [ComposeBefore(typeof(ICoreComposer))] // runs before every other IUmbracoCoreComponent! public sealed class DistributedCacheBinderComposer : ComponentComposer, ICoreComposer { diff --git a/src/Umbraco.Infrastructure/Compose/BlockEditorComposer.cs b/src/Umbraco.Infrastructure/Compose/BlockEditorComposer.cs index e281bcb19f..c0ab3c42b5 100644 --- a/src/Umbraco.Infrastructure/Compose/BlockEditorComposer.cs +++ b/src/Umbraco.Infrastructure/Compose/BlockEditorComposer.cs @@ -1,12 +1,10 @@ -using Umbraco.Core; -using Umbraco.Core.Composing; +using Umbraco.Core.Composing; namespace Umbraco.Web.Compose { /// /// A composer for Block editors to run a component /// - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public class BlockEditorComposer : ComponentComposer, ICoreComposer { } } diff --git a/src/Umbraco.Infrastructure/Compose/DatabaseServerRegistrarAndMessengerComponent.cs b/src/Umbraco.Infrastructure/Compose/DatabaseServerRegistrarAndMessengerComponent.cs index 3309c347db..49dab2d1db 100644 --- a/src/Umbraco.Infrastructure/Compose/DatabaseServerRegistrarAndMessengerComponent.cs +++ b/src/Umbraco.Infrastructure/Compose/DatabaseServerRegistrarAndMessengerComponent.cs @@ -22,8 +22,6 @@ namespace Umbraco.Web.Compose /// out the "server address" ie the address to which server-to-server requests should be sent - because it /// probably is not the "current request address" - especially in multi-domains configurations. /// - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] - // during Initialize / Startup, we end up checking Examine, which needs to be initialized beforehand // TODO: should not be a strong dependency on "examine" but on an "indexing component" [ComposeAfter(typeof(ExamineComposer))] diff --git a/src/Umbraco.Infrastructure/Compose/ManifestWatcherComposer.cs b/src/Umbraco.Infrastructure/Compose/ManifestWatcherComposer.cs index fb37e3dc25..786a3ed0ce 100644 --- a/src/Umbraco.Infrastructure/Compose/ManifestWatcherComposer.cs +++ b/src/Umbraco.Infrastructure/Compose/ManifestWatcherComposer.cs @@ -2,7 +2,6 @@ namespace Umbraco.Core.Compose { - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public class ManifestWatcherComposer : ComponentComposer, ICoreComposer { } } diff --git a/src/Umbraco.Infrastructure/Compose/NestedContentPropertyComposer.cs b/src/Umbraco.Infrastructure/Compose/NestedContentPropertyComposer.cs index 8e4cfbfffc..e357cf849b 100644 --- a/src/Umbraco.Infrastructure/Compose/NestedContentPropertyComposer.cs +++ b/src/Umbraco.Infrastructure/Compose/NestedContentPropertyComposer.cs @@ -6,7 +6,6 @@ namespace Umbraco.Web.Compose /// /// A composer for nested content to run a component /// - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public class NestedContentPropertyComposer : ComponentComposer, ICoreComposer { } } diff --git a/src/Umbraco.Infrastructure/Compose/NotificationsComposer.cs b/src/Umbraco.Infrastructure/Compose/NotificationsComposer.cs index a483b170de..44a5d58daa 100644 --- a/src/Umbraco.Infrastructure/Compose/NotificationsComposer.cs +++ b/src/Umbraco.Infrastructure/Compose/NotificationsComposer.cs @@ -3,7 +3,6 @@ using Umbraco.Core.Composing; namespace Umbraco.Web.Compose { - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public sealed class NotificationsComposer : ComponentComposer, ICoreComposer { public override void Compose(Composition composition) diff --git a/src/Umbraco.Infrastructure/Compose/PublicAccessComposer.cs b/src/Umbraco.Infrastructure/Compose/PublicAccessComposer.cs index 49b4978b80..3a23f7da34 100644 --- a/src/Umbraco.Infrastructure/Compose/PublicAccessComposer.cs +++ b/src/Umbraco.Infrastructure/Compose/PublicAccessComposer.cs @@ -1,12 +1,10 @@ -using Umbraco.Core; -using Umbraco.Core.Composing; +using Umbraco.Core.Composing; namespace Umbraco.Web.Compose { /// /// Used to ensure that the public access data file is kept up to date properly /// - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public sealed class PublicAccessComposer : ComponentComposer, ICoreComposer { } } diff --git a/src/Umbraco.Infrastructure/Compose/RelateOnCopyComposer.cs b/src/Umbraco.Infrastructure/Compose/RelateOnCopyComposer.cs index 3c65b291c6..4e4bd9ff15 100644 --- a/src/Umbraco.Infrastructure/Compose/RelateOnCopyComposer.cs +++ b/src/Umbraco.Infrastructure/Compose/RelateOnCopyComposer.cs @@ -2,7 +2,6 @@ namespace Umbraco.Core.Compose { - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public sealed class RelateOnCopyComposer : ComponentComposer, ICoreComposer { } } diff --git a/src/Umbraco.Infrastructure/Compose/RelateOnTrashComposer.cs b/src/Umbraco.Infrastructure/Compose/RelateOnTrashComposer.cs index d0e90fba33..76ee76f5ec 100644 --- a/src/Umbraco.Infrastructure/Compose/RelateOnTrashComposer.cs +++ b/src/Umbraco.Infrastructure/Compose/RelateOnTrashComposer.cs @@ -2,7 +2,6 @@ namespace Umbraco.Core.Compose { - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public sealed class RelateOnTrashComposer : ComponentComposer, ICoreComposer { } } diff --git a/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerComposer.cs b/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerComposer.cs index 6941647dfc..e65e05de0f 100644 --- a/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerComposer.cs +++ b/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerComposer.cs @@ -1,13 +1,10 @@ -using System.IO; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Serilog; using Umbraco.Core.Composing; -using Umbraco.Core.Hosting; namespace Umbraco.Core.Logging.Viewer { - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] // ReSharper disable once UnusedMember.Global public class LogViewerComposer : ICoreComposer { diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/DataTypes/PreValueMigratorComposer.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/DataTypes/PreValueMigratorComposer.cs index db9021d653..19e0845703 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/DataTypes/PreValueMigratorComposer.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/DataTypes/PreValueMigratorComposer.cs @@ -2,8 +2,7 @@ namespace Umbraco.Core.Migrations.Upgrade.V_8_0_0.DataTypes { -[RuntimeLevel(MinLevel = RuntimeLevel.Upgrade, MaxLevel = RuntimeLevel.Upgrade)] // only on upgrades -public class PreValueMigratorComposer : ICoreComposer + public class PreValueMigratorComposer : ICoreComposer { public void Compose(Composition composition) { diff --git a/src/Umbraco.Infrastructure/PropertyEditors/PropertyEditorsComposer.cs b/src/Umbraco.Infrastructure/PropertyEditors/PropertyEditorsComposer.cs index ce0cf2904f..da5c267f8b 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/PropertyEditorsComposer.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/PropertyEditorsComposer.cs @@ -1,9 +1,7 @@ -using Umbraco.Core; -using Umbraco.Core.Composing; +using Umbraco.Core.Composing; namespace Umbraco.Web.PropertyEditors { - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] internal class PropertyEditorsComposer : ComponentComposer, ICoreComposer { } } diff --git a/src/Umbraco.Infrastructure/Routing/RedirectTrackingComposer.cs b/src/Umbraco.Infrastructure/Routing/RedirectTrackingComposer.cs index bcafc8d050..ae2a87e3c6 100644 --- a/src/Umbraco.Infrastructure/Routing/RedirectTrackingComposer.cs +++ b/src/Umbraco.Infrastructure/Routing/RedirectTrackingComposer.cs @@ -1,5 +1,4 @@ -using Umbraco.Core; -using Umbraco.Core.Composing; +using Umbraco.Core.Composing; namespace Umbraco.Web.Routing { @@ -11,7 +10,6 @@ namespace Umbraco.Web.Routing /// not managing domains because we don't know how to do it - changing domains => must create a higher level strategy using rewriting rules probably /// recycle bin = moving to and from does nothing: to = the node is gone, where would we redirect? from = same /// - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public class RedirectTrackingComposer : ComponentComposer, ICoreComposer { } } diff --git a/src/Umbraco.Infrastructure/Search/ExamineComposer.cs b/src/Umbraco.Infrastructure/Search/ExamineComposer.cs index 24e32949ae..e8ee269aac 100644 --- a/src/Umbraco.Infrastructure/Search/ExamineComposer.cs +++ b/src/Umbraco.Infrastructure/Search/ExamineComposer.cs @@ -14,7 +14,6 @@ namespace Umbraco.Web.Search /// /// Configures and installs Examine. /// - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public sealed class ExamineComposer : ComponentComposer, ICoreComposer { public override void Compose(Composition composition) diff --git a/src/Umbraco.Infrastructure/Search/ExamineFinalComposer.cs b/src/Umbraco.Infrastructure/Search/ExamineFinalComposer.cs index 5b6334f1f6..6b33459159 100644 --- a/src/Umbraco.Infrastructure/Search/ExamineFinalComposer.cs +++ b/src/Umbraco.Infrastructure/Search/ExamineFinalComposer.cs @@ -1,5 +1,4 @@ -using Umbraco.Core; -using Umbraco.Core.Composing; +using Umbraco.Core.Composing; namespace Umbraco.Web.Search { @@ -7,7 +6,6 @@ namespace Umbraco.Web.Search // and *also* after ICoreComposer (in case IUserComposer is disabled) [ComposeAfter(typeof(IUserComposer))] [ComposeAfter(typeof(ICoreComposer))] - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public class ExamineFinalComposer : ComponentComposer { } } diff --git a/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs index 03d90616ba..aa8f91c508 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs @@ -1,9 +1,7 @@ using System.Linq; -using System.Reflection; using Microsoft.Extensions.DependencyInjection; using Umbraco.Core.Configuration; using Umbraco.Core; -using Umbraco.Core.Logging; using Umbraco.Core.Composing; using Umbraco.Core.Models.PublishedContent; using Umbraco.ModelsBuilder.Embedded.Building; @@ -13,7 +11,6 @@ using Microsoft.Extensions.Options; namespace Umbraco.ModelsBuilder.Embedded.Compose { [ComposeBefore(typeof(IPublishedCacheComposer))] - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public sealed class ModelsBuilderComposer : ICoreComposer { public void Compose(Composition composition) diff --git a/src/Umbraco.Tests.Integration/RuntimeTests.cs b/src/Umbraco.Tests.Integration/RuntimeTests.cs index db7f7499e3..eec62b9331 100644 --- a/src/Umbraco.Tests.Integration/RuntimeTests.cs +++ b/src/Umbraco.Tests.Integration/RuntimeTests.cs @@ -1,6 +1,7 @@ using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; @@ -58,21 +59,19 @@ namespace Umbraco.Tests.Integration // TODO: found these registration were necessary here (as we haven't called the HostBuilder?), as dependencies for ComponentCollection // are not resolved. Need to check this if these explicit registrations are the best way to handle this. - var contentSettings = new ContentSettings(); - var coreDebugSettings = new CoreDebugSettings(); - var nuCacheSettings = new NuCacheSettings(); - var requestHandlerSettings = new RequestHandlerSettings(); - var userPasswordConfigurationSettings = new UserPasswordConfigurationSettings(); - var webRoutingSettings = new WebRoutingSettings(); services.AddTransient(x => Options.Create(globalSettings)); services.AddTransient(x => Options.Create(connectionStrings)); - services.AddTransient(x => Options.Create(contentSettings)); - services.AddTransient(x => Options.Create(coreDebugSettings)); - services.AddTransient(x => Options.Create(nuCacheSettings)); - services.AddTransient(x => Options.Create(requestHandlerSettings)); - services.AddTransient(x => Options.Create(userPasswordConfigurationSettings)); - services.AddTransient(x => Options.Create(webRoutingSettings)); + services.AddTransient(x => Options.Create(new ContentSettings())); + services.AddTransient(x => Options.Create(new CoreDebugSettings())); + services.AddTransient(x => Options.Create(new NuCacheSettings())); + services.AddTransient(x => Options.Create(new RequestHandlerSettings())); + services.AddTransient(x => Options.Create(new UserPasswordConfigurationSettings())); + services.AddTransient(x => Options.Create(new WebRoutingSettings())); + services.AddTransient(x => Options.Create(new ModelsBuilderSettings())); + services.AddTransient(x => Options.Create(new RouteOptions())); + services.AddTransient(x => Options.Create(new IndexCreatorSettings())); + services.AddRouting(); // LinkGenerator services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); // Create the core runtime @@ -162,6 +161,8 @@ namespace Umbraco.Tests.Integration // Add it! services.AddUmbracoConfiguration(hostContext.Configuration); services.AddUmbracoCore(webHostEnvironment, GetType().Assembly, AppCaches.NoCache, testHelper.GetLoggingConfiguration(),hostContext.Configuration); + + services.AddRouting(); // LinkGenerator }); var host = await hostBuilder.StartAsync(); @@ -184,8 +185,6 @@ namespace Umbraco.Tests.Integration Assert.IsTrue(MyComponent.IsTerminated); } - - [RuntimeLevel(MinLevel = RuntimeLevel.Install)] public class MyComposer : IUserComposer { public void Compose(Composition composition) diff --git a/src/Umbraco.Tests.Integration/Testing/IntegrationTestComposer.cs b/src/Umbraco.Tests.Integration/Testing/IntegrationTestComposer.cs index f64c2c48b1..a0a4f4f886 100644 --- a/src/Umbraco.Tests.Integration/Testing/IntegrationTestComposer.cs +++ b/src/Umbraco.Tests.Integration/Testing/IntegrationTestComposer.cs @@ -35,7 +35,6 @@ namespace Umbraco.Tests.Integration.Testing /// /// This is a IUserComposer so that it runs after all core composers /// - [RuntimeLevel(MinLevel = RuntimeLevel.Boot)] public class IntegrationTestComposer : ComponentComposer { public override void Compose(Composition composition) diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Components/ComponentTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Components/ComponentTests.cs index b96065b928..f9cfef38c3 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Components/ComponentTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Components/ComponentTests.cs @@ -77,11 +77,11 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Components var typeLoader = MockTypeLoader(); var composition = new Composition(register, MockTypeLoader(), Mock.Of(), Mock.Of(), IOHelper, AppCaches.NoCache); - var types = TypeArray(); + var types = TypeArray(); var composers = new Composers(composition, types, Enumerable.Empty(), Mock.Of>(), Mock.Of()); Composed.Clear(); // 2 is Core and requires 4 - // 3 is User - goes away with RuntimeLevel.Unknown + // 3 is User // => reorder components accordingly composers.Compose(); AssertTypeArray(TypeArray(), Composed); @@ -270,10 +270,9 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Components var composers = new Composers(composition, types, Enumerable.Empty(), Mock.Of>(), Mock.Of()); Composed.Clear(); composers.Compose(); - Assert.AreEqual(2, Composed.Count); + Assert.AreEqual(3, Composed.Count); Assert.AreEqual(typeof(Composer4), Composed[0]); Assert.AreEqual(typeof(Composer2), Composed[1]); - //Assert.AreEqual(typeof(Component9), Composed[2]); -- goes away with RuntimeLevel.Unknown } [Test] diff --git a/src/Umbraco.Web.BackOffice/Extensions/BackOfficeServiceCollectionExtensions.cs b/src/Umbraco.Web.BackOffice/Extensions/BackOfficeServiceCollectionExtensions.cs index c340b87ea6..d16580eb79 100644 --- a/src/Umbraco.Web.BackOffice/Extensions/BackOfficeServiceCollectionExtensions.cs +++ b/src/Umbraco.Web.BackOffice/Extensions/BackOfficeServiceCollectionExtensions.cs @@ -52,9 +52,6 @@ namespace Umbraco.Extensions services.TryAddScoped(); - // TODO: MSDI - This needs some work, e.g. additional registrations / not registering as UserManager - // if we want container validation back on. - services.BuildUmbracoBackOfficeIdentity() .AddDefaultTokenProviders() .AddUserStore() @@ -85,12 +82,19 @@ namespace Umbraco.Extensions services.GetRequiredService())); services.TryAddScoped, DefaultUserConfirmation>(); services.TryAddScoped, UserClaimsPrincipalFactory>(); - services.TryAddScoped>(); - + // CUSTOM: services.TryAddScoped(); services.TryAddScoped(); + /* + * IdentityBuilderExtensions.AddUserManager adds UserManager to service collection + * To validate the container the following registrations are required (dependencies of UserManager) + * Perhaps we shouldn't be registering UserManager at all and only registering/depending the UmbracoBackOffice prefixed types. + */ + services.TryAddScoped(); + services.TryAddScoped(); + return new BackOfficeIdentityBuilder(services); } } diff --git a/src/Umbraco.Web.BackOffice/Security/ConfigureBackOfficeCookieOptions.cs b/src/Umbraco.Web.BackOffice/Security/ConfigureBackOfficeCookieOptions.cs index 56c72c3901..277e9e3dfc 100644 --- a/src/Umbraco.Web.BackOffice/Security/ConfigureBackOfficeCookieOptions.cs +++ b/src/Umbraco.Web.BackOffice/Security/ConfigureBackOfficeCookieOptions.cs @@ -225,11 +225,11 @@ namespace Umbraco.Web.BackOffice.Security /// private async Task EnsureValidSessionId(CookieValidatePrincipalContext context) { - if (_runtimeState.Level == RuntimeLevel.Run) - { - var validator = _serviceProvider.GetRequiredService(); - await validator.ValidateSessionAsync(TimeSpan.FromMinutes(1), context); - } + if (_runtimeState.Level != RuntimeLevel.Run) return; + + using var scope = _serviceProvider.CreateScope(); + var validator = scope.ServiceProvider.GetRequiredService(); + await validator.ValidateSessionAsync(TimeSpan.FromMinutes(1), context); } /// diff --git a/src/Umbraco.Web.BackOffice/SignalR/PreviewHubComposer.cs b/src/Umbraco.Web.BackOffice/SignalR/PreviewHubComposer.cs index d3c37a729a..de40340e6f 100644 --- a/src/Umbraco.Web.BackOffice/SignalR/PreviewHubComposer.cs +++ b/src/Umbraco.Web.BackOffice/SignalR/PreviewHubComposer.cs @@ -3,7 +3,6 @@ using Umbraco.Core.Composing; namespace Umbraco.Web.BackOffice.SignalR { - [RuntimeLevel(MinLevel = RuntimeLevel.Run)] public class PreviewHubComposer : ComponentComposer, ICoreComposer { public override void Compose(Composition composition) diff --git a/src/Umbraco.Web.Common/Runtime/AspNetCoreBootFailedComposer.cs b/src/Umbraco.Web.Common/Runtime/AspNetCoreBootFailedComposer.cs index fa2e090578..196b115618 100644 --- a/src/Umbraco.Web.Common/Runtime/AspNetCoreBootFailedComposer.cs +++ b/src/Umbraco.Web.Common/Runtime/AspNetCoreBootFailedComposer.cs @@ -7,7 +7,6 @@ namespace Umbraco.Web.Common.Runtime /// /// Executes if the boot fails to ensure critical services are registered /// - [RuntimeLevel(MinLevel = RuntimeLevel.BootFailed)] public class AspNetCoreBootFailedComposer : IComposer { public void Compose(Composition composition) diff --git a/src/Umbraco.Web.Common/Runtime/AspNetCoreComposer.cs b/src/Umbraco.Web.Common/Runtime/AspNetCoreComposer.cs index 9fac304d6b..05f9a94ce9 100644 --- a/src/Umbraco.Web.Common/Runtime/AspNetCoreComposer.cs +++ b/src/Umbraco.Web.Common/Runtime/AspNetCoreComposer.cs @@ -78,9 +78,6 @@ namespace Umbraco.Web.Common.Runtime composition.Services.AddUnique(); //register the install components - //NOTE: i tried to not have these registered if we weren't installing or upgrading but post install when the site restarts - //it still needs to use the install controller so we can't do that - // TODO: MSDI we can fix that composition.ComposeInstaller(); var umbracoApiControllerTypes = composition.TypeLoader.GetUmbracoApiControllers().ToList(); diff --git a/src/Umbraco.Web.UI.NetCore/Program.cs b/src/Umbraco.Web.UI.NetCore/Program.cs index 4fe23356f0..4a7722597d 100644 --- a/src/Umbraco.Web.UI.NetCore/Program.cs +++ b/src/Umbraco.Web.UI.NetCore/Program.cs @@ -21,9 +21,6 @@ namespace Umbraco.Web.UI.NetCore x.ClearProviders(); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }) - // TODO: MSDI - this should probably be on one day - // First we need to resolve the composition conditional registration issues see #8563 - .UseDefaultServiceProvider(options => options.ValidateOnBuild = false) .UseUmbraco(); } }