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();
}
}
}