diff --git a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs index d7b4b154eb..7552d4c0e7 100644 --- a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs +++ b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs @@ -56,8 +56,8 @@ namespace Umbraco.Tests.Routing public class TestRuntime : WebRuntime { - public TestRuntime(UmbracoApplicationBase umbracoApplication, Configs configs, IUmbracoVersion umbracoVersion, IIOHelper ioHelper, ILogger logger, IHostingEnvironment hostingEnvironment, IBackOfficeInfo backOfficeInfo) - : base(umbracoApplication, configs, umbracoVersion, ioHelper, Mock.Of(), Mock.Of(), hostingEnvironment, backOfficeInfo, TestHelper.DbProviderFactoryCreator, TestHelper.MainDom) + public TestRuntime(Configs configs, IUmbracoVersion umbracoVersion, IIOHelper ioHelper, ILogger logger, IHostingEnvironment hostingEnvironment, IBackOfficeInfo backOfficeInfo) + : base(configs, umbracoVersion, ioHelper, Mock.Of(), Mock.Of(), hostingEnvironment, backOfficeInfo, TestHelper.DbProviderFactoryCreator, TestHelper.MainDom) { } diff --git a/src/Umbraco.Tests/Views/web.config b/src/Umbraco.Tests/Views/web.config new file mode 100644 index 0000000000..efd80424e5 --- /dev/null +++ b/src/Umbraco.Tests/Views/web.config @@ -0,0 +1,74 @@ + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Umbraco.Web.BackOffice/AspNetCore/AspNetCoreBackOfficeInfo.cs b/src/Umbraco.Web.BackOffice/AspNetCore/AspNetCoreBackOfficeInfo.cs new file mode 100644 index 0000000000..ba12b64dfe --- /dev/null +++ b/src/Umbraco.Web.BackOffice/AspNetCore/AspNetCoreBackOfficeInfo.cs @@ -0,0 +1,16 @@ +using Umbraco.Core; +using Umbraco.Core.Configuration; + +namespace Umbraco.Web.BackOffice.AspNetCore +{ + public class AspNetCoreBackOfficeInfo : IBackOfficeInfo + { + public AspNetCoreBackOfficeInfo(IGlobalSettings globalSettings) + { + GetAbsoluteUrl = globalSettings.UmbracoPath; + } + + public string GetAbsoluteUrl { get; } + + } +} diff --git a/src/Umbraco.Web.BackOffice/AspNetCore/AspNetCoreMarchal.cs b/src/Umbraco.Web.BackOffice/AspNetCore/AspNetCoreMarchal.cs new file mode 100644 index 0000000000..98e040d338 --- /dev/null +++ b/src/Umbraco.Web.BackOffice/AspNetCore/AspNetCoreMarchal.cs @@ -0,0 +1,13 @@ +using System; +using System.Runtime.InteropServices; +using Umbraco.Core.Diagnostics; + +namespace Umbraco.Web.BackOffice +{ + + public class AspNetCoreMarchal : IMarchal + { + // This thing is not available in net standard, but exists in both .Net 4 and .Net Core 3 + public IntPtr GetExceptionPointers() => Marshal.GetExceptionPointers(); + } +} diff --git a/src/Umbraco.Web.BackOffice/AspNetCore/AspNetCoreSessionIdResolver.cs b/src/Umbraco.Web.BackOffice/AspNetCore/AspNetCoreSessionIdResolver.cs index abc043f9c5..5470516cf7 100644 --- a/src/Umbraco.Web.BackOffice/AspNetCore/AspNetCoreSessionIdResolver.cs +++ b/src/Umbraco.Web.BackOffice/AspNetCore/AspNetCoreSessionIdResolver.cs @@ -3,11 +3,11 @@ using Umbraco.Net; namespace Umbraco.Web.BackOffice.AspNetCore { - internal class AspNetSessionIdResolver : ISessionIdResolver + internal class AspNetCoreSessionIdResolver : ISessionIdResolver { private readonly IHttpContextAccessor _httpContextAccessor; - public AspNetSessionIdResolver(IHttpContextAccessor httpContextAccessor) + public AspNetCoreSessionIdResolver(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } diff --git a/src/Umbraco.Web.BackOffice/AspNetCore/UmbracoBackOfficeServiceCollectionExtensions.cs b/src/Umbraco.Web.BackOffice/AspNetCore/UmbracoBackOfficeServiceCollectionExtensions.cs index 700398b9c1..8c7a798e95 100644 --- a/src/Umbraco.Web.BackOffice/AspNetCore/UmbracoBackOfficeServiceCollectionExtensions.cs +++ b/src/Umbraco.Web.BackOffice/AspNetCore/UmbracoBackOfficeServiceCollectionExtensions.cs @@ -1,4 +1,12 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; +using Umbraco.Core; +using Umbraco.Core.Cache; +using Umbraco.Core.Configuration; +using Umbraco.Core.IO; +using Umbraco.Core.Logging; +using Umbraco.Core.Logging.Serilog; namespace Umbraco.Web.BackOffice.AspNetCore { @@ -6,8 +14,37 @@ namespace Umbraco.Web.BackOffice.AspNetCore { public static IServiceCollection AddUmbracoBackOffice(this IServiceCollection services) { + + + services.AddSingleton(); + + CreateCompositionRoot(services); + + return services; } + private static void CreateCompositionRoot(IServiceCollection services) + { + var serviceProvider = services.BuildServiceProvider(); + + var httpContextAccessor = serviceProvider.GetService(); + var webHostEnvironment = serviceProvider.GetService(); + + var configFactory = new ConfigsFactory(); + + var hostingSettings = configFactory.HostingSettings; + var coreDebug = configFactory.CoreDebug; + + var hostingEnvironment = new AspNetCoreHostingEnvironment(hostingSettings, webHostEnvironment); + var ioHelper = new IOHelper(hostingEnvironment); + var configs = configFactory.Create(ioHelper); + + var logger = SerilogLogger.CreateWithDefaultConfiguration(hostingEnvironment, new AspNetCoreSessionIdResolver(httpContextAccessor), () => services.BuildServiceProvider().GetService(), coreDebug, ioHelper, new AspNetCoreMarchal()); + var backOfficeInfo = new AspNetCoreBackOfficeInfo(configs.Global()); + var profiler = new LogProfiler(logger); + + Composing.Current.Initialize(logger, configs, ioHelper, hostingEnvironment, backOfficeInfo, profiler); + } } } diff --git a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj index 4a9a3bb6d2..ca260b12f5 100644 --- a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj +++ b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj @@ -11,6 +11,7 @@ + diff --git a/src/Umbraco.Web/Runtime/WebRuntime.cs b/src/Umbraco.Web/Runtime/WebRuntime.cs index 0fc35af2f2..9c8337c2e4 100644 --- a/src/Umbraco.Web/Runtime/WebRuntime.cs +++ b/src/Umbraco.Web/Runtime/WebRuntime.cs @@ -22,15 +22,12 @@ namespace Umbraco.Web.Runtime /// On top of CoreRuntime, handles all of the web-related runtime aspects of Umbraco. public class WebRuntime : CoreRuntime { - private readonly UmbracoApplicationBase _umbracoApplication; private BuildManagerTypeFinder _typeFinder; /// /// Initializes a new instance of the class. /// - /// public WebRuntime( - UmbracoApplicationBase umbracoApplication, Configs configs, IUmbracoVersion umbracoVersion, IIOHelper ioHelper, @@ -42,7 +39,6 @@ namespace Umbraco.Web.Runtime IMainDom mainDom): base(configs, umbracoVersion, ioHelper, logger, profiler ,new AspNetUmbracoBootPermissionChecker(), hostingEnvironment, backOfficeInfo, dbProviderFactoryCreator, mainDom) { - _umbracoApplication = umbracoApplication; Profiler = GetWebProfiler(); } diff --git a/src/Umbraco.Web/UmbracoApplication.cs b/src/Umbraco.Web/UmbracoApplication.cs index 90d575bf73..34b0ae5412 100644 --- a/src/Umbraco.Web/UmbracoApplication.cs +++ b/src/Umbraco.Web/UmbracoApplication.cs @@ -34,7 +34,7 @@ namespace Umbraco.Web var mainDom = new MainDom(logger, hostingEnvironment, mainDomLock); - return new WebRuntime(this, configs, umbracoVersion, ioHelper, logger, profiler, hostingEnvironment, backOfficeInfo, dbProviderFactoryCreator, mainDom); + return new WebRuntime(configs, umbracoVersion, ioHelper, logger, profiler, hostingEnvironment, backOfficeInfo, dbProviderFactoryCreator, mainDom); } ///