diff --git a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs index d423eb6849..89d6f5ee2c 100644 --- a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs +++ b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs @@ -156,7 +156,7 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection builder.Services.AddSingleton( services => new EmailSender( services.GetRequiredService>(), - services.GetRequiredService>(), + services.GetRequiredService>(), services.GetRequiredService(), services.GetService>(), services.GetService>())); diff --git a/src/Umbraco.Infrastructure/Logging/Serilog/Enrichers/ThreadAbortExceptionEnricher.cs b/src/Umbraco.Infrastructure/Logging/Serilog/Enrichers/ThreadAbortExceptionEnricher.cs index 9ea3d0009d..d0de79931b 100644 --- a/src/Umbraco.Infrastructure/Logging/Serilog/Enrichers/ThreadAbortExceptionEnricher.cs +++ b/src/Umbraco.Infrastructure/Logging/Serilog/Enrichers/ThreadAbortExceptionEnricher.cs @@ -15,15 +15,16 @@ namespace Umbraco.Cms.Core.Logging.Serilog.Enrichers /// public class ThreadAbortExceptionEnricher : ILogEventEnricher { - private readonly CoreDebugSettings _coreDebugSettings; + private CoreDebugSettings _coreDebugSettings; private readonly IHostingEnvironment _hostingEnvironment; private readonly IMarchal _marchal; - public ThreadAbortExceptionEnricher(IOptions coreDebugSettings, IHostingEnvironment hostingEnvironment, IMarchal marchal) + public ThreadAbortExceptionEnricher(IOptionsMonitor coreDebugSettings, IHostingEnvironment hostingEnvironment, IMarchal marchal) { - _coreDebugSettings = coreDebugSettings.Value; + _coreDebugSettings = coreDebugSettings.CurrentValue; _hostingEnvironment = hostingEnvironment; _marchal = marchal; + coreDebugSettings.OnChange(x => _coreDebugSettings = x); } public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) diff --git a/src/Umbraco.Infrastructure/Mail/EmailSender.cs b/src/Umbraco.Infrastructure/Mail/EmailSender.cs index e5fbde2aac..098d690345 100644 --- a/src/Umbraco.Infrastructure/Mail/EmailSender.cs +++ b/src/Umbraco.Infrastructure/Mail/EmailSender.cs @@ -22,27 +22,28 @@ namespace Umbraco.Cms.Infrastructure.Mail { // TODO: This should encapsulate a BackgroundTaskRunner with a queue to send these emails! private readonly IEventAggregator _eventAggregator; - private readonly GlobalSettings _globalSettings; + private GlobalSettings _globalSettings; private readonly bool _notificationHandlerRegistered; private readonly ILogger _logger; public EmailSender( ILogger logger, - IOptions globalSettings, + IOptionsMonitor globalSettings, IEventAggregator eventAggregator) : this(logger, globalSettings, eventAggregator, null, null) { } public EmailSender( ILogger logger, - IOptions globalSettings, + IOptionsMonitor globalSettings, IEventAggregator eventAggregator, INotificationHandler handler1, INotificationAsyncHandler handler2) { _logger = logger; _eventAggregator = eventAggregator; - _globalSettings = globalSettings.Value; + _globalSettings = globalSettings.CurrentValue; _notificationHandlerRegistered = handler1 is not null || handler2 is not null; + globalSettings.OnChange(x => _globalSettings = x); } /// diff --git a/src/Umbraco.Infrastructure/ModelsBuilder/Building/ModelsGenerator.cs b/src/Umbraco.Infrastructure/ModelsBuilder/Building/ModelsGenerator.cs index ac4780cb7c..930bc163f0 100644 --- a/src/Umbraco.Infrastructure/ModelsBuilder/Building/ModelsGenerator.cs +++ b/src/Umbraco.Infrastructure/ModelsBuilder/Building/ModelsGenerator.cs @@ -10,16 +10,17 @@ namespace Umbraco.Cms.Infrastructure.ModelsBuilder.Building public class ModelsGenerator { private readonly UmbracoServices _umbracoService; - private readonly ModelsBuilderSettings _config; + private ModelsBuilderSettings _config; private readonly OutOfDateModelsStatus _outOfDateModels; private readonly IHostingEnvironment _hostingEnvironment; - public ModelsGenerator(UmbracoServices umbracoService, IOptions config, OutOfDateModelsStatus outOfDateModels, IHostingEnvironment hostingEnvironment) + public ModelsGenerator(UmbracoServices umbracoService, IOptionsMonitor config, OutOfDateModelsStatus outOfDateModels, IHostingEnvironment hostingEnvironment) { _umbracoService = umbracoService; - _config = config.Value; + _config = config.CurrentValue; _outOfDateModels = outOfDateModels; _hostingEnvironment = hostingEnvironment; + config.OnChange(x => _config = x); } public void GenerateModels() diff --git a/src/Umbraco.Infrastructure/ModelsBuilder/ModelsGenerationError.cs b/src/Umbraco.Infrastructure/ModelsBuilder/ModelsGenerationError.cs index 18b28c2bba..15e629f4f0 100644 --- a/src/Umbraco.Infrastructure/ModelsBuilder/ModelsGenerationError.cs +++ b/src/Umbraco.Infrastructure/ModelsBuilder/ModelsGenerationError.cs @@ -10,16 +10,17 @@ namespace Umbraco.Cms.Infrastructure.ModelsBuilder { public sealed class ModelsGenerationError { - private readonly ModelsBuilderSettings _config; + private ModelsBuilderSettings _config; private readonly IHostingEnvironment _hostingEnvironment; /// /// Initializes a new instance of the class. /// - public ModelsGenerationError(IOptions config, IHostingEnvironment hostingEnvironment) + public ModelsGenerationError(IOptionsMonitor config, IHostingEnvironment hostingEnvironment) { - _config = config.Value; + _config = config.CurrentValue; _hostingEnvironment = hostingEnvironment; + config.OnChange(x => _config = x); } public void Clear() diff --git a/src/Umbraco.Infrastructure/ModelsBuilder/OutOfDateModelsStatus.cs b/src/Umbraco.Infrastructure/ModelsBuilder/OutOfDateModelsStatus.cs index 3816db52bf..1d9ea7d499 100644 --- a/src/Umbraco.Infrastructure/ModelsBuilder/OutOfDateModelsStatus.cs +++ b/src/Umbraco.Infrastructure/ModelsBuilder/OutOfDateModelsStatus.cs @@ -15,16 +15,17 @@ namespace Umbraco.Cms.Infrastructure.ModelsBuilder public sealed class OutOfDateModelsStatus : INotificationHandler, INotificationHandler { - private readonly ModelsBuilderSettings _config; + private ModelsBuilderSettings _config; private readonly IHostingEnvironment _hostingEnvironment; /// /// Initializes a new instance of the class. /// - public OutOfDateModelsStatus(IOptions config, IHostingEnvironment hostingEnvironment) + public OutOfDateModelsStatus(IOptionsMonitor config, IHostingEnvironment hostingEnvironment) { - _config = config.Value; + _config = config.CurrentValue; _hostingEnvironment = hostingEnvironment; + config.OnChange(x => _config = x); } /// diff --git a/src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyEditor.cs index 4b26f8eefa..d0de6e3d63 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyEditor.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyEditor.cs @@ -28,7 +28,7 @@ namespace Umbraco.Cms.Core.PropertyEditors INotificationHandler { private readonly MediaFileManager _mediaFileManager; - private readonly ContentSettings _contentSettings; + private readonly IOptionsMonitor _contentSettings; private readonly UploadAutoFillProperties _uploadAutoFillProperties; private readonly ILocalizedTextService _localizedTextService; private readonly IContentService _contentService; @@ -37,7 +37,7 @@ namespace Umbraco.Cms.Core.PropertyEditors public FileUploadPropertyEditor( IDataValueEditorFactory dataValueEditorFactory, MediaFileManager mediaFileManager, - IOptions contentSettings, + IOptionsMonitor contentSettings, ILocalizedTextService localizedTextService, UploadAutoFillProperties uploadAutoFillProperties, IContentService contentService, @@ -45,7 +45,7 @@ namespace Umbraco.Cms.Core.PropertyEditors : base(dataValueEditorFactory) { _mediaFileManager = mediaFileManager ?? throw new ArgumentNullException(nameof(mediaFileManager)); - _contentSettings = contentSettings.Value; + _contentSettings = contentSettings; _localizedTextService = localizedTextService; _uploadAutoFillProperties = uploadAutoFillProperties; _contentService = contentService; @@ -62,7 +62,7 @@ namespace Umbraco.Cms.Core.PropertyEditors protected override IDataValueEditor CreateValueEditor() { var editor = DataValueEditorFactory.Create(Attribute); - editor.Validators.Add(new UploadFileTypeValidator(_localizedTextService, Options.Create(_contentSettings))); + editor.Validators.Add(new UploadFileTypeValidator(_localizedTextService, _contentSettings)); return editor; } @@ -182,7 +182,7 @@ namespace Umbraco.Cms.Core.PropertyEditors foreach (var property in properties) { - var autoFillConfig = _contentSettings.GetConfig(property.Alias); + var autoFillConfig = _contentSettings.CurrentValue.GetConfig(property.Alias); if (autoFillConfig == null) continue; foreach (var pvalue in property.Values) diff --git a/src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyValueEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyValueEditor.cs index ca3132e330..4977ede5b3 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyValueEditor.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyValueEditor.cs @@ -21,20 +21,21 @@ namespace Umbraco.Cms.Core.PropertyEditors internal class FileUploadPropertyValueEditor : DataValueEditor { private readonly MediaFileManager _mediaFileManager; - private readonly ContentSettings _contentSettings; + private ContentSettings _contentSettings; public FileUploadPropertyValueEditor( DataEditorAttribute attribute, MediaFileManager mediaFileManager, ILocalizedTextService localizedTextService, IShortStringHelper shortStringHelper, - IOptions contentSettings, + IOptionsMonitor contentSettings, IJsonSerializer jsonSerializer, IIOHelper ioHelper) : base(localizedTextService, shortStringHelper, jsonSerializer, ioHelper, attribute) { _mediaFileManager = mediaFileManager ?? throw new ArgumentNullException(nameof(mediaFileManager)); - _contentSettings = contentSettings.Value ?? throw new ArgumentNullException(nameof(contentSettings)); + _contentSettings = contentSettings.CurrentValue ?? throw new ArgumentNullException(nameof(contentSettings)); + contentSettings.OnChange(x => _contentSettings = x); } /// diff --git a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs index 95023cecf6..8afdb42419 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs @@ -36,7 +36,7 @@ namespace Umbraco.Cms.Core.PropertyEditors INotificationHandler { private readonly MediaFileManager _mediaFileManager; - private readonly ContentSettings _contentSettings; + private ContentSettings _contentSettings; private readonly IDataTypeService _dataTypeService; private readonly IIOHelper _ioHelper; private readonly UploadAutoFillProperties _autoFillProperties; @@ -50,7 +50,7 @@ namespace Umbraco.Cms.Core.PropertyEditors IDataValueEditorFactory dataValueEditorFactory, ILoggerFactory loggerFactory, MediaFileManager mediaFileManager, - IOptions contentSettings, + IOptionsMonitor contentSettings, IDataTypeService dataTypeService, IIOHelper ioHelper, UploadAutoFillProperties uploadAutoFillProperties, @@ -58,12 +58,14 @@ namespace Umbraco.Cms.Core.PropertyEditors : base(dataValueEditorFactory) { _mediaFileManager = mediaFileManager ?? throw new ArgumentNullException(nameof(mediaFileManager)); - _contentSettings = contentSettings.Value ?? throw new ArgumentNullException(nameof(contentSettings)); + _contentSettings = contentSettings.CurrentValue ?? throw new ArgumentNullException(nameof(contentSettings)); _dataTypeService = dataTypeService ?? throw new ArgumentNullException(nameof(dataTypeService)); _ioHelper = ioHelper ?? throw new ArgumentNullException(nameof(ioHelper)); _autoFillProperties = uploadAutoFillProperties ?? throw new ArgumentNullException(nameof(uploadAutoFillProperties)); _contentService = contentService; _logger = loggerFactory.CreateLogger(); + + contentSettings.OnChange(x => _contentSettings = x); } public bool TryGetMediaPath(string propertyEditorAlias, object value, out string mediaPath) diff --git a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyValueEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyValueEditor.cs index 10a99ccd99..4fa41bc7d3 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyValueEditor.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyValueEditor.cs @@ -27,7 +27,7 @@ namespace Umbraco.Cms.Core.PropertyEditors { private readonly ILogger _logger; private readonly MediaFileManager _mediaFileManager; - private readonly ContentSettings _contentSettings; + private ContentSettings _contentSettings; private readonly IDataTypeService _dataTypeService; public ImageCropperPropertyValueEditor( @@ -36,7 +36,7 @@ namespace Umbraco.Cms.Core.PropertyEditors MediaFileManager mediaFileSystem, ILocalizedTextService localizedTextService, IShortStringHelper shortStringHelper, - IOptions contentSettings, + IOptionsMonitor contentSettings, IJsonSerializer jsonSerializer, IIOHelper ioHelper, IDataTypeService dataTypeService) @@ -44,8 +44,9 @@ namespace Umbraco.Cms.Core.PropertyEditors { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _mediaFileManager = mediaFileSystem ?? throw new ArgumentNullException(nameof(mediaFileSystem)); - _contentSettings = contentSettings.Value; + _contentSettings = contentSettings.CurrentValue; _dataTypeService = dataTypeService; + contentSettings.OnChange(x => _contentSettings = x); } /// diff --git a/src/Umbraco.Infrastructure/PropertyEditors/UploadFileTypeValidator.cs b/src/Umbraco.Infrastructure/PropertyEditors/UploadFileTypeValidator.cs index f866ed405f..9ef266357d 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/UploadFileTypeValidator.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/UploadFileTypeValidator.cs @@ -16,12 +16,14 @@ namespace Umbraco.Cms.Core.PropertyEditors internal class UploadFileTypeValidator : IValueValidator { private readonly ILocalizedTextService _localizedTextService; - private readonly ContentSettings _contentSettings; + private ContentSettings _contentSettings; - public UploadFileTypeValidator(ILocalizedTextService localizedTextService, IOptions contentSettings) + public UploadFileTypeValidator(ILocalizedTextService localizedTextService, IOptionsMonitor contentSettings) { _localizedTextService = localizedTextService; - _contentSettings = contentSettings.Value; + _contentSettings = contentSettings.CurrentValue; + + contentSettings.OnChange(x => _contentSettings = x); } public IEnumerable Validate(object value, string valueType, object dataTypeConfiguration) diff --git a/src/Umbraco.Infrastructure/Routing/ContentFinderByConfigured404.cs b/src/Umbraco.Infrastructure/Routing/ContentFinderByConfigured404.cs index aff8c40331..bb7afdb6dc 100644 --- a/src/Umbraco.Infrastructure/Routing/ContentFinderByConfigured404.cs +++ b/src/Umbraco.Infrastructure/Routing/ContentFinderByConfigured404.cs @@ -20,7 +20,7 @@ namespace Umbraco.Cms.Core.Routing { private readonly ILogger _logger; private readonly IEntityService _entityService; - private readonly ContentSettings _contentSettings; + private ContentSettings _contentSettings; private readonly IExamineManager _examineManager; private readonly IUmbracoContextAccessor _umbracoContextAccessor; private readonly IVariationContextAccessor _variationContextAccessor; @@ -31,17 +31,19 @@ namespace Umbraco.Cms.Core.Routing public ContentFinderByConfigured404( ILogger logger, IEntityService entityService, - IOptions contentConfigSettings, + IOptionsMonitor contentSettings, IExamineManager examineManager, IVariationContextAccessor variationContextAccessor, IUmbracoContextAccessor umbracoContextAccessor) { _logger = logger; _entityService = entityService; - _contentSettings = contentConfigSettings.Value; + _contentSettings = contentSettings.CurrentValue; _examineManager = examineManager; _variationContextAccessor = variationContextAccessor; _umbracoContextAccessor = umbracoContextAccessor; + + contentSettings.OnChange(x => _contentSettings = x); } /// diff --git a/src/Umbraco.Infrastructure/Scoping/ScopeProvider.cs b/src/Umbraco.Infrastructure/Scoping/ScopeProvider.cs index 1da8b7bf1c..4cc354cbad 100644 --- a/src/Umbraco.Infrastructure/Scoping/ScopeProvider.cs +++ b/src/Umbraco.Infrastructure/Scoping/ScopeProvider.cs @@ -28,7 +28,7 @@ namespace Umbraco.Cms.Core.Scoping private readonly ILoggerFactory _loggerFactory; private readonly IRequestCache _requestCache; private readonly FileSystems _fileSystems; - private readonly CoreDebugSettings _coreDebugSettings; + private CoreDebugSettings _coreDebugSettings; private readonly MediaFileManager _mediaFileManager; private static readonly AsyncLocal> s_scopeStack = new AsyncLocal>(); private static readonly AsyncLocal> s_scopeContextStack = new AsyncLocal>(); @@ -36,11 +36,11 @@ namespace Umbraco.Cms.Core.Scoping private static readonly string s_contextItemKey = typeof(ScopeProvider).FullName; private readonly IEventAggregator _eventAggregator; - public ScopeProvider(IUmbracoDatabaseFactory databaseFactory, FileSystems fileSystems, IOptions coreDebugSettings, MediaFileManager mediaFileManager, ILogger logger, ILoggerFactory loggerFactory, IRequestCache requestCache, IEventAggregator eventAggregator) + public ScopeProvider(IUmbracoDatabaseFactory databaseFactory, FileSystems fileSystems, IOptionsMonitor coreDebugSettings, MediaFileManager mediaFileManager, ILogger logger, ILoggerFactory loggerFactory, IRequestCache requestCache, IEventAggregator eventAggregator) { DatabaseFactory = databaseFactory; _fileSystems = fileSystems; - _coreDebugSettings = coreDebugSettings.Value; + _coreDebugSettings = coreDebugSettings.CurrentValue; _mediaFileManager = mediaFileManager; _logger = logger; _loggerFactory = loggerFactory; @@ -48,6 +48,8 @@ namespace Umbraco.Cms.Core.Scoping _eventAggregator = eventAggregator; // take control of the FileSystems _fileSystems.IsScoped = () => AmbientScope != null && AmbientScope.ScopedFileSystems; + + coreDebugSettings.OnChange(x => _coreDebugSettings = x); } public IUmbracoDatabaseFactory DatabaseFactory { get; } diff --git a/src/Umbraco.Infrastructure/Security/BackOfficeUserStore.cs b/src/Umbraco.Infrastructure/Security/BackOfficeUserStore.cs index e656e68193..47e849dea9 100644 --- a/src/Umbraco.Infrastructure/Security/BackOfficeUserStore.cs +++ b/src/Umbraco.Infrastructure/Security/BackOfficeUserStore.cs @@ -30,7 +30,7 @@ namespace Umbraco.Cms.Core.Security private readonly IUserService _userService; private readonly IEntityService _entityService; private readonly IExternalLoginService _externalLoginService; - private readonly GlobalSettings _globalSettings; + private GlobalSettings _globalSettings; private readonly IUmbracoMapper _mapper; private readonly AppCaches _appCaches; @@ -42,7 +42,7 @@ namespace Umbraco.Cms.Core.Security IUserService userService, IEntityService entityService, IExternalLoginService externalLoginService, - IOptions globalSettings, + IOptionsMonitor globalSettings, IUmbracoMapper mapper, BackOfficeErrorDescriber describer, AppCaches appCaches) @@ -52,11 +52,13 @@ namespace Umbraco.Cms.Core.Security _userService = userService ?? throw new ArgumentNullException(nameof(userService)); _entityService = entityService; _externalLoginService = externalLoginService ?? throw new ArgumentNullException(nameof(externalLoginService)); - _globalSettings = globalSettings.Value; + _globalSettings = globalSettings.CurrentValue; _mapper = mapper; _appCaches = appCaches; _userService = userService; _externalLoginService = externalLoginService; + + globalSettings.OnChange(x => _globalSettings = x); } /// diff --git a/src/Umbraco.Infrastructure/Security/IdentityMapDefinition.cs b/src/Umbraco.Infrastructure/Security/IdentityMapDefinition.cs index 5addc73a3f..e9645fa24a 100644 --- a/src/Umbraco.Infrastructure/Security/IdentityMapDefinition.cs +++ b/src/Umbraco.Infrastructure/Security/IdentityMapDefinition.cs @@ -17,19 +17,21 @@ namespace Umbraco.Cms.Core.Security { private readonly ILocalizedTextService _textService; private readonly IEntityService _entityService; - private readonly IOptions _globalSettings; + private GlobalSettings _globalSettings; private readonly AppCaches _appCaches; public IdentityMapDefinition( ILocalizedTextService textService, IEntityService entityService, - IOptions globalSettings, + IOptionsMonitor globalSettings, AppCaches appCaches) { _textService = textService; _entityService = entityService; - _globalSettings = globalSettings; + _globalSettings = globalSettings.CurrentValue; _appCaches = appCaches; + + globalSettings.OnChange(x => _globalSettings = x); } public void DefineMaps(IUmbracoMapper mapper) @@ -37,7 +39,7 @@ namespace Umbraco.Cms.Core.Security mapper.Define( (source, context) => { - var target = new BackOfficeIdentityUser(_globalSettings.Value, source.Id, source.Groups); + var target = new BackOfficeIdentityUser(_globalSettings, source.Id, source.Groups); target.DisableChangeTracking(); return target; }, @@ -82,7 +84,7 @@ namespace Umbraco.Cms.Core.Security target.PasswordConfig = source.PasswordConfiguration; target.StartContentIds = source.StartContentIds; target.StartMediaIds = source.StartMediaIds; - target.Culture = source.GetUserCulture(_textService, _globalSettings.Value).ToString(); // project CultureInfo to string + target.Culture = source.GetUserCulture(_textService, _globalSettings).ToString(); // project CultureInfo to string target.IsApproved = source.IsApproved; target.SecurityStamp = source.SecurityStamp; target.LockoutEnd = source.IsLockedOut ? DateTime.MaxValue.ToUniversalTime() : (DateTime?)null; diff --git a/src/Umbraco.Infrastructure/Sync/BatchedDatabaseServerMessenger.cs b/src/Umbraco.Infrastructure/Sync/BatchedDatabaseServerMessenger.cs index 9bae34cf3e..bc58342d82 100644 --- a/src/Umbraco.Infrastructure/Sync/BatchedDatabaseServerMessenger.cs +++ b/src/Umbraco.Infrastructure/Sync/BatchedDatabaseServerMessenger.cs @@ -37,7 +37,7 @@ namespace Umbraco.Cms.Infrastructure.Sync IRequestCache requestCache, IRequestAccessor requestAccessor, LastSyncedFileManager lastSyncedFileManager, - IOptions globalSettings) + IOptionsMonitor globalSettings) : base(mainDom, cacheRefreshers, serverRoleAccessor, logger, true, syncBootStateAccessor, hostingEnvironment, cacheInstructionService, jsonSerializer, lastSyncedFileManager, globalSettings) { _requestCache = requestCache; diff --git a/src/Umbraco.Infrastructure/Sync/DatabaseServerMessenger.cs b/src/Umbraco.Infrastructure/Sync/DatabaseServerMessenger.cs index 10556b7fe6..b6dcc4d432 100644 --- a/src/Umbraco.Infrastructure/Sync/DatabaseServerMessenger.cs +++ b/src/Umbraco.Infrastructure/Sync/DatabaseServerMessenger.cs @@ -56,7 +56,7 @@ namespace Umbraco.Cms.Infrastructure.Sync ICacheInstructionService cacheInstructionService, IJsonSerializer jsonSerializer, LastSyncedFileManager lastSyncedFileManager, - IOptions globalSettings) + IOptionsMonitor globalSettings) : base(distributedEnabled) { _cancellationToken = _cancellationTokenSource.Token; @@ -69,9 +69,11 @@ namespace Umbraco.Cms.Infrastructure.Sync CacheInstructionService = cacheInstructionService; JsonSerializer = jsonSerializer; _lastSyncedFileManager = lastSyncedFileManager; - GlobalSettings = globalSettings.Value; + GlobalSettings = globalSettings.CurrentValue; _lastPruned = _lastSync = DateTime.UtcNow; _syncIdle = new ManualResetEvent(true); + + globalSettings.OnChange(x => GlobalSettings = x); using (var process = Process.GetCurrentProcess()) { // See notes on _localIdentity @@ -85,7 +87,7 @@ namespace Umbraco.Cms.Infrastructure.Sync } - public GlobalSettings GlobalSettings { get; } + public GlobalSettings GlobalSettings { get; private set; } protected ILogger Logger { get; } diff --git a/src/Umbraco.Infrastructure/Sync/SyncBootStateAccessor.cs b/src/Umbraco.Infrastructure/Sync/SyncBootStateAccessor.cs index 9a77c57965..ff6823177a 100644 --- a/src/Umbraco.Infrastructure/Sync/SyncBootStateAccessor.cs +++ b/src/Umbraco.Infrastructure/Sync/SyncBootStateAccessor.cs @@ -11,7 +11,7 @@ namespace Umbraco.Cms.Infrastructure.Sync { private readonly ILogger _logger; private readonly LastSyncedFileManager _lastSyncedFileManager; - private readonly GlobalSettings _globalSettings; + private GlobalSettings _globalSettings; private readonly ICacheInstructionService _cacheInstructionService; private SyncBootState _syncBootState; @@ -21,13 +21,15 @@ namespace Umbraco.Cms.Infrastructure.Sync public SyncBootStateAccessor( ILogger logger, LastSyncedFileManager lastSyncedFileManager, - IOptions globalSettings, + IOptionsMonitor globalSettings, ICacheInstructionService cacheInstructionService) { _logger = logger; _lastSyncedFileManager = lastSyncedFileManager; - _globalSettings = globalSettings.Value; + _globalSettings = globalSettings.CurrentValue; _cacheInstructionService = cacheInstructionService; + + globalSettings.OnChange(x => _globalSettings = x); } public SyncBootState GetSyncBootState() diff --git a/src/Umbraco.Infrastructure/WebAssets/BackOfficeWebAssets.cs b/src/Umbraco.Infrastructure/WebAssets/BackOfficeWebAssets.cs index c7e6df8cb2..34c3f65652 100644 --- a/src/Umbraco.Infrastructure/WebAssets/BackOfficeWebAssets.cs +++ b/src/Umbraco.Infrastructure/WebAssets/BackOfficeWebAssets.cs @@ -28,7 +28,7 @@ namespace Umbraco.Cms.Infrastructure.WebAssets private readonly IRuntimeMinifier _runtimeMinifier; private readonly IManifestParser _parser; - private readonly GlobalSettings _globalSettings; + private GlobalSettings _globalSettings; private readonly CustomBackOfficeAssetsCollection _customBackOfficeAssetsCollection; private readonly IHostingEnvironment _hostingEnvironment; private readonly PropertyEditorCollection _propertyEditorCollection; @@ -38,15 +38,17 @@ namespace Umbraco.Cms.Infrastructure.WebAssets IManifestParser parser, PropertyEditorCollection propertyEditorCollection, IHostingEnvironment hostingEnvironment, - IOptions globalSettings, + IOptionsMonitor globalSettings, CustomBackOfficeAssetsCollection customBackOfficeAssetsCollection) { _runtimeMinifier = runtimeMinifier; _parser = parser; _propertyEditorCollection = propertyEditorCollection; _hostingEnvironment = hostingEnvironment; - _globalSettings = globalSettings.Value; + _globalSettings = globalSettings.CurrentValue; _customBackOfficeAssetsCollection = customBackOfficeAssetsCollection; + + globalSettings.OnChange(x => _globalSettings = x); } public void CreateBundles() @@ -170,7 +172,7 @@ namespace Umbraco.Cms.Infrastructure.WebAssets switch (assetType) { - case AssetType.Javascript: + case AssetType.Javascript: _runtimeMinifier.CreateJsBundle(bundleName, BundlingOptions.OptimizedAndComposite, filePaths); break; case AssetType.Css: @@ -178,7 +180,7 @@ namespace Umbraco.Cms.Infrastructure.WebAssets break; default: throw new IndexOutOfRangeException(); - } + } } } } diff --git a/src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Security/BackOfficeUserStoreTests.cs b/src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Security/BackOfficeUserStoreTests.cs index 665bb2f079..01a6db0a8e 100644 --- a/src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Security/BackOfficeUserStoreTests.cs +++ b/src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Security/BackOfficeUserStoreTests.cs @@ -12,6 +12,7 @@ using Umbraco.Cms.Core.Models.Membership; using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Tests.Common; using Umbraco.Cms.Tests.Common.Testing; using Umbraco.Cms.Tests.Integration.Testing; @@ -33,7 +34,7 @@ namespace Umbraco.Cms.Tests.Integration.Umbraco.Infrastructure.Security UserService, EntityService, ExternalLoginService, - Options.Create(GlobalSettings), + new TestOptionsMonitor(GlobalSettings), UmbracoMapper, new BackOfficeErrorDescriber(TextService), AppCaches); diff --git a/src/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs b/src/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs index 3a8949cff3..e130bbfcf8 100644 --- a/src/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs +++ b/src/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs @@ -136,7 +136,7 @@ namespace Umbraco.Cms.Tests.UnitTests.TestHelpers public static UriUtility UriUtility => s_testHelperInternal.UriUtility; - public static IEmailSender EmailSender { get; } = new EmailSender(new NullLogger(), Options.Create(new GlobalSettings()), Mock.Of()); + public static IEmailSender EmailSender { get; } = new EmailSender(new NullLogger(), new TestOptionsMonitor(new GlobalSettings()), Mock.Of()); /// /// Some test files are copied to the /bin (/bin/debug) on build, this is a utility to return their physical path based on a virtual path name diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Components/ComponentTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Components/ComponentTests.cs index 4173417582..2fb4ce2f21 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Components/ComponentTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Components/ComponentTests.cs @@ -27,6 +27,7 @@ using Umbraco.Cms.Core.Strings; using Umbraco.Cms.Infrastructure.Migrations.Install; using Umbraco.Cms.Infrastructure.Persistence; using Umbraco.Cms.Infrastructure.Persistence.Mappers; +using Umbraco.Cms.Tests.Common; using Umbraco.Cms.Tests.UnitTests.TestHelpers; namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Components @@ -68,7 +69,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Components Mock.Of(), Options.Create(new ContentSettings())); IEventAggregator eventAggregator = Mock.Of(); - var scopeProvider = new ScopeProvider(f, fs, Options.Create(coreDebug), mediaFileManager, loggerFactory.CreateLogger(), loggerFactory, NoAppCache.Instance, eventAggregator); + var scopeProvider = new ScopeProvider(f, fs, new TestOptionsMonitor(coreDebug), mediaFileManager, loggerFactory.CreateLogger(), loggerFactory, NoAppCache.Instance, eventAggregator); mock.Setup(x => x.GetService(typeof(ILogger))).Returns(logger); mock.Setup(x => x.GetService(typeof(ILogger))).Returns(loggerFactory.CreateLogger); diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Scoping/ScopeEventDispatcherTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Scoping/ScopeEventDispatcherTests.cs index 59eba97c59..5cb21cac3c 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Scoping/ScopeEventDispatcherTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Scoping/ScopeEventDispatcherTests.cs @@ -16,6 +16,7 @@ using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Strings; using Umbraco.Cms.Infrastructure.Persistence; +using Umbraco.Cms.Tests.Common; using Umbraco.Cms.Tests.Common.Builders; namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Scoping @@ -91,7 +92,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Scoping return new ScopeProvider( Mock.Of(), fileSystems, - Options.Create(new CoreDebugSettings()), + new TestOptionsMonitor(new CoreDebugSettings()), mediaFileManager, Mock.Of>(), instance, diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Scoping/ScopedNotificationPublisherTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Scoping/ScopedNotificationPublisherTests.cs index db25b946b4..5e6b3fe382 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Scoping/ScopedNotificationPublisherTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Scoping/ScopedNotificationPublisherTests.cs @@ -16,6 +16,7 @@ using Umbraco.Cms.Core.PropertyEditors; using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Core.Strings; using Umbraco.Cms.Infrastructure.Persistence; +using Umbraco.Cms.Tests.Common; namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Scoping { @@ -92,7 +93,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Scoping return new ScopeProvider( Mock.Of(), fileSystems, - Options.Create(new CoreDebugSettings()), + new TestOptionsMonitor(new CoreDebugSettings()), mediaFileManager, loggerFactory.CreateLogger(), loggerFactory, diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Scoping/ScopeUnitTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Scoping/ScopeUnitTests.cs index b699061f5a..cc4532580a 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Scoping/ScopeUnitTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Scoping/ScopeUnitTests.cs @@ -18,6 +18,7 @@ using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Core.Strings; using Umbraco.Cms.Infrastructure.Persistence; using Umbraco.Cms.Infrastructure.Persistence.SqlSyntax; +using Umbraco.Cms.Tests.Common; namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Scoping { @@ -59,7 +60,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Scoping return new ScopeProvider( databaseFactory.Object, fileSystems, - Options.Create(new CoreDebugSettings()), + new TestOptionsMonitor(new CoreDebugSettings()), mediaFileManager, loggerFactory.CreateLogger(), loggerFactory, diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberManagerTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberManagerTests.cs index 05afd547e1..88b2aa25bc 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberManagerTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberManagerTests.cs @@ -17,6 +17,7 @@ using Umbraco.Cms.Core.PublishedCache; using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Tests.Common; using Umbraco.Cms.Tests.Common.Builders; using Umbraco.Cms.Tests.Common.Builders.Extensions; using Umbraco.Cms.Web.Common.Security; @@ -43,7 +44,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security new IdentityMapDefinition( Mock.Of(), Mock.Of(), - Options.Create(new GlobalSettings()), + new TestOptionsMonitor(new GlobalSettings()), AppCaches.Disabled), }; diff --git a/src/Umbraco.Web.BackOffice/Controllers/CodeFileController.cs b/src/Umbraco.Web.BackOffice/Controllers/CodeFileController.cs index 64a47c4cc4..e5f82cc0e1 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/CodeFileController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/CodeFileController.cs @@ -54,7 +54,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers ILocalizedTextService localizedTextService, IUmbracoMapper umbracoMapper, IShortStringHelper shortStringHelper, - IOptions globalSettings) + IOptionsSnapshot globalSettings) { _hostingEnvironment = hostingEnvironment; _fileSystems = fileSystems; diff --git a/src/Umbraco.Web.BackOffice/Controllers/CurrentUserController.cs b/src/Umbraco.Web.BackOffice/Controllers/CurrentUserController.cs index ba6ca36085..b3ef4b8665 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/CurrentUserController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/CurrentUserController.cs @@ -55,7 +55,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers public CurrentUserController( MediaFileManager mediaFileManager, - IOptions contentSettings, + IOptionsSnapshot contentSettings, IHostingEnvironment hostingEnvironment, IImageUrlGenerator imageUrlGenerator, IBackOfficeSecurityAccessor backofficeSecurityAccessor, diff --git a/src/Umbraco.Web.BackOffice/Controllers/DashboardController.cs b/src/Umbraco.Web.BackOffice/Controllers/DashboardController.cs index 7b64d05633..0c6f798901 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/DashboardController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/DashboardController.cs @@ -40,7 +40,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers private readonly IDashboardService _dashboardService; private readonly IUmbracoVersion _umbracoVersion; private readonly IShortStringHelper _shortStringHelper; - private readonly IOptions _dashboardSettings; + private readonly ContentDashboardSettings _dashboardSettings; /// /// Initializes a new instance of the with all its dependencies. /// @@ -51,7 +51,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers IDashboardService dashboardService, IUmbracoVersion umbracoVersion, IShortStringHelper shortStringHelper, - IOptions dashboardSettings) + IOptionsSnapshot dashboardSettings) { _backOfficeSecurityAccessor = backOfficeSecurityAccessor; @@ -60,7 +60,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers _dashboardService = dashboardService; _umbracoVersion = umbracoVersion; _shortStringHelper = shortStringHelper; - _dashboardSettings = dashboardSettings; + _dashboardSettings = dashboardSettings.Value; } //we have just one instance of HttpClient shared for the entire application @@ -78,7 +78,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers var url = string.Format("{0}{1}?section={2}&allowed={3}&lang={4}&version={5}&admin={6}", baseUrl, - _dashboardSettings.Value.ContentDashboardPath, + _dashboardSettings.ContentDashboardPath, section, allowedSections, language, diff --git a/src/Umbraco.Web.BackOffice/Controllers/DataTypeController.cs b/src/Umbraco.Web.BackOffice/Controllers/DataTypeController.cs index d68c3f06f5..4765eb338c 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/DataTypeController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/DataTypeController.cs @@ -51,7 +51,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers public DataTypeController( PropertyEditorCollection propertyEditors, IDataTypeService dataTypeService, - IOptions contentSettings, + IOptionsSnapshot contentSettings, IUmbracoMapper umbracoMapper, PropertyEditorCollection propertyEditorCollection, IContentTypeService contentTypeService, diff --git a/src/Umbraco.Web.BackOffice/Controllers/DictionaryController.cs b/src/Umbraco.Web.BackOffice/Controllers/DictionaryController.cs index 4d0e2cfe14..504b3db25f 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/DictionaryController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/DictionaryController.cs @@ -45,7 +45,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers ILogger logger, ILocalizationService localizationService, IBackOfficeSecurityAccessor backofficeSecurityAccessor, - IOptions globalSettings, + IOptionsSnapshot globalSettings, ILocalizedTextService localizedTextService, IUmbracoMapper umbracoMapper ) diff --git a/src/Umbraco.Web.BackOffice/Controllers/LanguageController.cs b/src/Umbraco.Web.BackOffice/Controllers/LanguageController.cs index 310b1142c0..4e84bac0fe 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/LanguageController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/LanguageController.cs @@ -32,7 +32,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers public LanguageController(ILocalizationService localizationService, IUmbracoMapper umbracoMapper, - IOptions globalSettings) + IOptionsSnapshot globalSettings) { _localizationService = localizationService ?? throw new ArgumentNullException(nameof(localizationService)); _umbracoMapper = umbracoMapper ?? throw new ArgumentNullException(nameof(umbracoMapper)); diff --git a/src/Umbraco.Web.BackOffice/Controllers/MediaController.cs b/src/Umbraco.Web.BackOffice/Controllers/MediaController.cs index d54bd7a093..f3c2b7d245 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/MediaController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/MediaController.cs @@ -78,7 +78,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers IShortStringHelper shortStringHelper, IEventMessagesFactory eventMessages, ILocalizedTextService localizedTextService, - IOptions contentSettings, + IOptionsSnapshot contentSettings, IMediaTypeService mediaTypeService, IMediaService mediaService, IEntityService entityService, diff --git a/src/Umbraco.Web.BackOffice/Controllers/PreviewController.cs b/src/Umbraco.Web.BackOffice/Controllers/PreviewController.cs index b443a8dead..a7ba84f405 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/PreviewController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/PreviewController.cs @@ -42,7 +42,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers public PreviewController( UmbracoFeatures features, - IOptions globalSettings, + IOptionsSnapshot globalSettings, IPublishedSnapshotService publishedSnapshotService, IBackOfficeSecurityAccessor backofficeSecurityAccessor, ILocalizationService localizationService, diff --git a/src/Umbraco.Web.BackOffice/Controllers/TinyMceController.cs b/src/Umbraco.Web.BackOffice/Controllers/TinyMceController.cs index c1d2cecc2d..cc4bc82ad6 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/TinyMceController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/TinyMceController.cs @@ -34,7 +34,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers public TinyMceController( IHostingEnvironment hostingEnvironment, IShortStringHelper shortStringHelper, - IOptions contentSettings, + IOptionsSnapshot contentSettings, IIOHelper ioHelper, IImageUrlGenerator imageUrlGenerator) { diff --git a/src/Umbraco.Web.BackOffice/Controllers/TourController.cs b/src/Umbraco.Web.BackOffice/Controllers/TourController.cs index 3b6116cc6c..63696a8dea 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/TourController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/TourController.cs @@ -29,7 +29,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers public TourController( TourFilterCollection filters, IHostingEnvironment hostingEnvironment, - IOptions tourSettings, + IOptionsSnapshot tourSettings, IBackOfficeSecurityAccessor backofficeSecurityAccessor, IContentTypeService contentTypeService) { diff --git a/src/Umbraco.Web.BackOffice/Controllers/UpdateCheckController.cs b/src/Umbraco.Web.BackOffice/Controllers/UpdateCheckController.cs index 145b3a658f..dad9c1d4ef 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/UpdateCheckController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/UpdateCheckController.cs @@ -31,7 +31,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers IUmbracoVersion umbracoVersion, ICookieManager cookieManager, IBackOfficeSecurityAccessor backofficeSecurityAccessor, - IOptions globalSettings) + IOptionsSnapshot globalSettings) { _upgradeService = upgradeService ?? throw new ArgumentNullException(nameof(upgradeService)); _umbracoVersion = umbracoVersion ?? throw new ArgumentNullException(nameof(umbracoVersion)); @@ -81,7 +81,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers { private readonly GlobalSettings _globalSettings; - public UpdateCheckResponseFilter(IOptions globalSettings) + public UpdateCheckResponseFilter(IOptionsSnapshot globalSettings) { _globalSettings = globalSettings.Value; } diff --git a/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs b/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs index 821719c796..41cb882713 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs @@ -78,11 +78,11 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers public UsersController( MediaFileManager mediaFileManager, - IOptions contentSettings, + IOptionsSnapshot contentSettings, IHostingEnvironment hostingEnvironment, ISqlContext sqlContext, IImageUrlGenerator imageUrlGenerator, - IOptions securitySettings, + IOptionsSnapshot securitySettings, IEmailSender emailSender, IBackOfficeSecurityAccessor backofficeSecurityAccessor, AppCaches appCaches, @@ -90,7 +90,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers IUserService userService, ILocalizedTextService localizedTextService, IUmbracoMapper umbracoMapper, - IOptions globalSettings, + IOptionsSnapshot globalSettings, IBackOfficeUserManager backOfficeUserManager, ILoggerFactory loggerFactory, LinkGenerator linkGenerator, @@ -554,7 +554,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers // This needs to be in the correct mailto format including the name, else // the name cannot be captured in the email sending notification. - // i.e. "Some Person" + // i.e. "Some Person" var toMailBoxAddress = new MailboxAddress(to.Name, to.Email); var mailMessage = new EmailMessage(fromEmail, toMailBoxAddress.ToString(), emailSubject, emailBody, true); diff --git a/src/Umbraco.Web.BackOffice/Filters/CheckIfUserTicketDataIsStaleAttribute.cs b/src/Umbraco.Web.BackOffice/Filters/CheckIfUserTicketDataIsStaleAttribute.cs index 178d9d50f0..d5c1271860 100644 --- a/src/Umbraco.Web.BackOffice/Filters/CheckIfUserTicketDataIsStaleAttribute.cs +++ b/src/Umbraco.Web.BackOffice/Filters/CheckIfUserTicketDataIsStaleAttribute.cs @@ -38,7 +38,7 @@ namespace Umbraco.Cms.Web.BackOffice.Filters private readonly IUserService _userService; private readonly IEntityService _entityService; private readonly ILocalizedTextService _localizedTextService; - private readonly IOptions _globalSettings; + private GlobalSettings _globalSettings; private readonly IBackOfficeSignInManager _backOfficeSignInManager; private readonly IBackOfficeAntiforgery _backOfficeAntiforgery; private readonly IScopeProvider _scopeProvider; @@ -50,7 +50,7 @@ namespace Umbraco.Cms.Web.BackOffice.Filters IUserService userService, IEntityService entityService, ILocalizedTextService localizedTextService, - IOptions globalSettings, + IOptionsSnapshot globalSettings, IBackOfficeSignInManager backOfficeSignInManager, IBackOfficeAntiforgery backOfficeAntiforgery, IScopeProvider scopeProvider, @@ -61,7 +61,7 @@ namespace Umbraco.Cms.Web.BackOffice.Filters _userService = userService; _entityService = entityService; _localizedTextService = localizedTextService; - _globalSettings = globalSettings; + _globalSettings = globalSettings.Value; _backOfficeSignInManager = backOfficeSignInManager; _backOfficeAntiforgery = backOfficeAntiforgery; _scopeProvider = scopeProvider; @@ -136,7 +136,7 @@ namespace Umbraco.Cms.Web.BackOffice.Filters () => user.Username != identity.GetUsername(), () => { - CultureInfo culture = user.GetUserCulture(_localizedTextService, _globalSettings.Value); + CultureInfo culture = user.GetUserCulture(_localizedTextService, _globalSettings); return culture != null && culture.ToString() != identity.GetCultureString(); }, () => user.AllowedSections.UnsortedSequenceEqual(identity.GetAllowedApplications()) == false, diff --git a/src/Umbraco.Web.BackOffice/Filters/JsonCamelCaseFormatterAttribute.cs b/src/Umbraco.Web.BackOffice/Filters/JsonCamelCaseFormatterAttribute.cs index c8b7683a2c..9d92dc8f8c 100644 --- a/src/Umbraco.Web.BackOffice/Filters/JsonCamelCaseFormatterAttribute.cs +++ b/src/Umbraco.Web.BackOffice/Filters/JsonCamelCaseFormatterAttribute.cs @@ -18,12 +18,12 @@ namespace Umbraco.Cms.Web.BackOffice.Filters private class JsonCamelCaseFormatterFilter : IResultFilter { private readonly ArrayPool _arrayPool; - private readonly IOptions _options; + private readonly MvcOptions _options; - public JsonCamelCaseFormatterFilter(ArrayPool arrayPool, IOptions options) + public JsonCamelCaseFormatterFilter(ArrayPool arrayPool, IOptionsSnapshot options) { _arrayPool = arrayPool; - _options = options; + _options = options.Value; } public void OnResultExecuted(ResultExecutedContext context) { @@ -39,11 +39,9 @@ namespace Umbraco.Cms.Web.BackOffice.Filters }; objectResult.Formatters.Clear(); - objectResult.Formatters.Add(new AngularJsonMediaTypeFormatter(serializerSettings, _arrayPool, _options.Value)); + objectResult.Formatters.Add(new AngularJsonMediaTypeFormatter(serializerSettings, _arrayPool, _options)); } } - - } } } diff --git a/src/Umbraco.Web.BackOffice/Filters/UmbracoRequireHttpsAttribute.cs b/src/Umbraco.Web.BackOffice/Filters/UmbracoRequireHttpsAttribute.cs index b793346eba..a782d73550 100644 --- a/src/Umbraco.Web.BackOffice/Filters/UmbracoRequireHttpsAttribute.cs +++ b/src/Umbraco.Web.BackOffice/Filters/UmbracoRequireHttpsAttribute.cs @@ -16,7 +16,7 @@ namespace Umbraco.Cms.Web.BackOffice.Filters // just like the base class does, we'll just resolve the required services from the httpcontext. // we want to re-use their code so we don't have much choice, else we have to do some code tricks, // this is just easiest. - var optionsAccessor = filterContext.HttpContext.RequestServices.GetRequiredService>(); + var optionsAccessor = filterContext.HttpContext.RequestServices.GetRequiredService>(); if (optionsAccessor.Value.UseHttps) { // only continue if this flag is set diff --git a/src/Umbraco.Web.Common/ModelsBuilder/InMemoryModelFactory.cs b/src/Umbraco.Web.Common/ModelsBuilder/InMemoryModelFactory.cs index 44e08f0af1..293f4afad2 100644 --- a/src/Umbraco.Web.Common/ModelsBuilder/InMemoryModelFactory.cs +++ b/src/Umbraco.Web.Common/ModelsBuilder/InMemoryModelFactory.cs @@ -59,7 +59,7 @@ namespace Umbraco.Cms.Web.Common.ModelsBuilder Lazy umbracoServices, IProfilingLogger profilingLogger, ILogger logger, - IOptions config, + IOptionsMonitor config, IHostingEnvironment hostingEnvironment, IApplicationShutdownRegistry hostingLifetime, IPublishedValueFallback publishedValueFallback, @@ -68,7 +68,7 @@ namespace Umbraco.Cms.Web.Common.ModelsBuilder _umbracoServices = umbracoServices; _profilingLogger = profilingLogger; _logger = logger; - _config = config.Value; + _config = config.CurrentValue; _hostingEnvironment = hostingEnvironment; _hostingLifetime = hostingLifetime; _publishedValueFallback = publishedValueFallback;