Changed singleton created dependencies in composition root to use IOptionsMonitor.
This commit is contained in:
@@ -15,9 +15,9 @@ namespace Umbraco.Core.Composing
|
||||
private readonly TypeFinderSettings _settings;
|
||||
private IEnumerable<string> _assembliesAcceptingLoadExceptions;
|
||||
|
||||
public TypeFinderConfig(IOptions<TypeFinderSettings> settings)
|
||||
public TypeFinderConfig(IOptionsMonitor<TypeFinderSettings> settings)
|
||||
{
|
||||
_settings = settings.Value;
|
||||
_settings = settings.CurrentValue;
|
||||
}
|
||||
|
||||
public IEnumerable<string> AssembliesAcceptingLoadExceptions
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
|
||||
using System;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Moq;
|
||||
using System;
|
||||
using System.Data.Common;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Moq;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Cache;
|
||||
using Umbraco.Core.Configuration.Models;
|
||||
using Umbraco.Core.Diagnostics;
|
||||
using Umbraco.Core.Hosting;
|
||||
using Umbraco.Core.Logging;
|
||||
using Umbraco.Net;
|
||||
using Umbraco.Core.Persistence;
|
||||
using Umbraco.Core.Runtime;
|
||||
using Umbraco.Net;
|
||||
using Umbraco.Tests.Common;
|
||||
using Umbraco.Tests.Common.Builders;
|
||||
using Umbraco.Web.Common.AspNetCore;
|
||||
using IHostingEnvironment = Umbraco.Core.Hosting.IHostingEnvironment;
|
||||
using Umbraco.Tests.Common.Builders;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace Umbraco.Tests.Integration.Implementations
|
||||
{
|
||||
@@ -106,7 +106,8 @@ namespace Umbraco.Tests.Integration.Implementations
|
||||
if (_backOfficeInfo == null)
|
||||
{
|
||||
var globalSettings = new GlobalSettingsBuilder().Build();
|
||||
_backOfficeInfo = new AspNetCoreBackOfficeInfo(Options.Create(globalSettings));
|
||||
var mockedOptionsMonitorOfGlobalSettings = Mock.Of<IOptionsMonitor<GlobalSettings>>(x => x.CurrentValue == globalSettings);
|
||||
_backOfficeInfo = new AspNetCoreBackOfficeInfo(mockedOptionsMonitorOfGlobalSettings);
|
||||
}
|
||||
|
||||
return _backOfficeInfo;
|
||||
@@ -114,9 +115,15 @@ namespace Umbraco.Tests.Integration.Implementations
|
||||
|
||||
public override IHostingEnvironment GetHostingEnvironment()
|
||||
=> _hostingEnvironment ??= new TestHostingEnvironment(
|
||||
new HostingSettingsBuilder().Build(),
|
||||
GetIOptionsMonitorOfHostingSettings(),
|
||||
_hostEnvironment);
|
||||
|
||||
private IOptionsMonitor<HostingSettings> GetIOptionsMonitorOfHostingSettings()
|
||||
{
|
||||
var hostingSettings = new HostingSettingsBuilder().Build();
|
||||
return Mock.Of<IOptionsMonitor<HostingSettings>>(x => x.CurrentValue == hostingSettings);
|
||||
}
|
||||
|
||||
public override IApplicationShutdownRegistry GetHostingEnvironmentLifetime() => _hostingLifetime;
|
||||
|
||||
public override IIpResolver GetIpResolver() => _ipResolver;
|
||||
|
||||
@@ -8,8 +8,8 @@ namespace Umbraco.Tests.Integration.Implementations
|
||||
{
|
||||
public class TestHostingEnvironment : AspNetCoreHostingEnvironment, IHostingEnvironment
|
||||
{
|
||||
public TestHostingEnvironment(HostingSettings hostingSettings, IWebHostEnvironment webHostEnvironment)
|
||||
: base(Options.Create(hostingSettings), webHostEnvironment)
|
||||
public TestHostingEnvironment(IOptionsMonitor<HostingSettings> hostingSettings, IWebHostEnvironment webHostEnvironment)
|
||||
: base(hostingSettings, webHostEnvironment)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -48,10 +48,8 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Extensions
|
||||
[TestCase("http://www.domain.com/umbraco/test/legacyAjaxCalls.ashx?some=query&blah=js", "", true)]
|
||||
public void Is_Back_Office_Request(string input, string virtualPath, bool expected)
|
||||
{
|
||||
var hostingSettings = new HostingSettingsBuilder().WithApplicationVirtualPath(virtualPath).Build();
|
||||
var hostingEnvironment = new AspNetCoreHostingEnvironment(Options.Create(hostingSettings), _hostEnvironment);
|
||||
|
||||
var source = new Uri(input);
|
||||
var hostingEnvironment = CreateHostingEnvironment(virtualPath);
|
||||
Assert.AreEqual(expected, source.IsBackOfficeRequest(_globalSettings, hostingEnvironment));
|
||||
}
|
||||
|
||||
@@ -67,11 +65,17 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Extensions
|
||||
public void Is_Installer_Request(string input, bool expected)
|
||||
{
|
||||
var source = new Uri(input);
|
||||
var hostingSettings = new HostingSettingsBuilder().Build();
|
||||
var hostingEnvironment = new AspNetCoreHostingEnvironment(Options.Create(hostingSettings), _hostEnvironment);
|
||||
var hostingEnvironment = CreateHostingEnvironment();
|
||||
Assert.AreEqual(expected, source.IsInstallerRequest(hostingEnvironment));
|
||||
}
|
||||
|
||||
private AspNetCoreHostingEnvironment CreateHostingEnvironment(string virtualPath = "")
|
||||
{
|
||||
var hostingSettings = new HostingSettingsBuilder().WithApplicationVirtualPath(virtualPath).Build();
|
||||
var mockedOptionsMonitorOfHostingSettings = Mock.Of<IOptionsMonitor<HostingSettings>>(x => x.CurrentValue == hostingSettings);
|
||||
return new AspNetCoreHostingEnvironment(mockedOptionsMonitorOfHostingSettings, _hostEnvironment);
|
||||
}
|
||||
|
||||
[TestCase("http://www.domain.com/foo/bar", "/", "http://www.domain.com/")]
|
||||
[TestCase("http://www.domain.com/foo/bar#hop", "/", "http://www.domain.com/")]
|
||||
[TestCase("http://www.domain.com/foo/bar?q=2#hop", "/", "http://www.domain.com/?q=2")]
|
||||
|
||||
@@ -6,9 +6,9 @@ namespace Umbraco.Web.Common.AspNetCore
|
||||
{
|
||||
public class AspNetCoreBackOfficeInfo : IBackOfficeInfo
|
||||
{
|
||||
public AspNetCoreBackOfficeInfo(IOptions<GlobalSettings> globalSettings)
|
||||
public AspNetCoreBackOfficeInfo(IOptionsMonitor<GlobalSettings> globalSettings)
|
||||
{
|
||||
GetAbsoluteUrl = globalSettings.Value.UmbracoPath;
|
||||
GetAbsoluteUrl = globalSettings.CurrentValue.UmbracoPath;
|
||||
}
|
||||
|
||||
public string GetAbsoluteUrl { get; } // TODO make absolute
|
||||
|
||||
@@ -15,9 +15,9 @@ namespace Umbraco.Web.Common.AspNetCore
|
||||
|
||||
private string _localTempPath;
|
||||
|
||||
public AspNetCoreHostingEnvironment(IOptions<HostingSettings> hostingSettings, IWebHostEnvironment webHostEnvironment)
|
||||
public AspNetCoreHostingEnvironment(IOptionsMonitor<HostingSettings> hostingSettings, IWebHostEnvironment webHostEnvironment)
|
||||
{
|
||||
_hostingSettings = hostingSettings.Value ?? throw new ArgumentNullException(nameof(hostingSettings));
|
||||
_hostingSettings = hostingSettings.CurrentValue ?? throw new ArgumentNullException(nameof(hostingSettings));
|
||||
_webHostEnvironment = webHostEnvironment ?? throw new ArgumentNullException(nameof(webHostEnvironment));
|
||||
|
||||
SiteName = webHostEnvironment.ApplicationName;
|
||||
|
||||
@@ -230,10 +230,10 @@ namespace Umbraco.Extensions
|
||||
// `RegisterEssentials`.
|
||||
var serviceProvider = services.BuildServiceProvider();
|
||||
|
||||
var globalSettings = serviceProvider.GetService<IOptions<GlobalSettings>>();
|
||||
var globalSettings = serviceProvider.GetService<IOptionsMonitor<GlobalSettings>>();
|
||||
var connectionStrings = serviceProvider.GetService<IOptions<ConnectionStrings>>();
|
||||
var hostingSettings = serviceProvider.GetService<IOptions<HostingSettings>>();
|
||||
var typeFinderSettings = serviceProvider.GetService<IOptions<TypeFinderSettings>>();
|
||||
var hostingSettings = serviceProvider.GetService<IOptionsMonitor<HostingSettings>>();
|
||||
var typeFinderSettings = serviceProvider.GetService<IOptionsMonitor<TypeFinderSettings>>();
|
||||
|
||||
var dbProviderFactoryCreator = serviceProvider.GetRequiredService<IDbProviderFactoryCreator>();
|
||||
|
||||
@@ -250,7 +250,7 @@ namespace Umbraco.Extensions
|
||||
var configs = serviceProvider.GetService<Configs>();
|
||||
var coreRuntime = GetCoreRuntime(
|
||||
configs,
|
||||
globalSettings.Value,
|
||||
globalSettings.CurrentValue,
|
||||
connectionStrings.Value,
|
||||
umbracoVersion,
|
||||
ioHelper,
|
||||
@@ -267,7 +267,7 @@ namespace Umbraco.Extensions
|
||||
return services;
|
||||
}
|
||||
|
||||
private static ITypeFinder CreateTypeFinder(Core.Logging.ILogger logger, IProfiler profiler, IWebHostEnvironment webHostEnvironment, Assembly entryAssembly, IOptions<TypeFinderSettings> typeFinderSettings)
|
||||
private static ITypeFinder CreateTypeFinder(Core.Logging.ILogger logger, IProfiler profiler, IWebHostEnvironment webHostEnvironment, Assembly entryAssembly, IOptionsMonitor<TypeFinderSettings> typeFinderSettings)
|
||||
{
|
||||
var runtimeHashPaths = new RuntimeHashPaths();
|
||||
runtimeHashPaths.AddFolder(new DirectoryInfo(Path.Combine(webHostEnvironment.ContentRootPath, "bin")));
|
||||
@@ -311,8 +311,8 @@ namespace Umbraco.Extensions
|
||||
|
||||
private static IServiceCollection CreateCompositionRoot(
|
||||
IServiceCollection services,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IOptions<HostingSettings> hostingSettings,
|
||||
IOptionsMonitor<GlobalSettings> globalSettings,
|
||||
IOptionsMonitor<HostingSettings> hostingSettings,
|
||||
IWebHostEnvironment webHostEnvironment,
|
||||
ILoggingConfiguration loggingConfiguration,
|
||||
out Core.Logging.ILogger logger,
|
||||
|
||||
Reference in New Issue
Block a user