using Microsoft.AspNetCore.Http; using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Hosting; using Umbraco.Net; using Umbraco.Core.Runtime; using Umbraco.Core.Security; using Umbraco.Web.Common.AspNetCore; using Umbraco.Web.Common.Formatters; using Umbraco.Web.Common.Lifetime; using Umbraco.Web.Common.Macros; using Umbraco.Web.Composing.CompositionExtensions; using Umbraco.Web.Macros; using Umbraco.Core.Diagnostics; using Umbraco.Core.Logging; using Umbraco.Web.Common.Profiler; using Umbraco.Web.Common.Install; using Umbraco.Extensions; using System.Linq; using Umbraco.Web.Common.Controllers; using Umbraco.Web.Common.Middleware; using Umbraco.Web.Common.ModelBinding; using Umbraco.Web.Security; using Umbraco.Web.Trees; namespace Umbraco.Web.Common.Runtime { /// /// Adds/replaces AspNetCore specific services /// [ComposeBefore(typeof(ICoreComposer))] [ComposeAfter(typeof(CoreInitialComposer))] public class AspNetCoreComposer : ComponentComposer, IComposer { public new void Compose(Composition composition) { base.Compose(composition); // AspNetCore specific services composition.RegisterUnique(); composition.RegisterUnique(); // Our own netcore implementations composition.RegisterMultipleUnique(); composition.RegisterUnique(); // The umbraco request lifetime composition.RegisterMultipleUnique(); //Password hasher composition.RegisterUnique(); composition.RegisterUnique(); composition.Register(); composition.RegisterUnique(); composition.RegisterMultipleUnique(); composition.RegisterUnique(); composition.RegisterUnique(); composition.RegisterUnique(); composition.RegisterUnique(); composition.RegisterUnique(); // register the umbraco context factory composition.RegisterUnique(); composition.RegisterUnique(factory => factory.GetInstance().GetRequiredUmbracoContext().Security); //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 composition.ComposeInstaller(); var umbracoApiControllerTypes = composition.TypeLoader.GetUmbracoApiControllers().ToList(); composition.WithCollectionBuilder() .Add(umbracoApiControllerTypes); composition.RegisterUnique(); composition.RegisterUnique(); composition.RegisterUnique(); composition.RegisterUnique(); composition.RegisterUnique(); } } }