U4-8861 Extract GlobalSettings to an interface and expose on the standard UmbracoConfig.For settings singleton including a bunch of cleanup, getting the installer and steps to be DI

This commit is contained in:
Shannon
2018-04-06 13:51:54 +10:00
parent 7442c96be1
commit c90d6be8ab
161 changed files with 1637 additions and 1608 deletions

View File

@@ -16,6 +16,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
internal class PublishedContentCache : PublishedCacheBase, IPublishedContentCache
{
private readonly ICacheProvider _cacheProvider;
private readonly IGlobalSettings _globalSettings;
private readonly RoutesCache _routesCache;
private readonly IDomainCache _domainCache;
private readonly DomainHelper _domainHelper;
@@ -29,13 +30,15 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
public PublishedContentCache(
XmlStore xmlStore, // an XmlStore containing the master xml
IDomainCache domainCache, // an IDomainCache implementation
ICacheProvider cacheProvider, // an ICacheProvider that should be at request-level
ICacheProvider cacheProvider, // an ICacheProvider that should be at request-level
IGlobalSettings globalSettings,
PublishedContentTypeCache contentTypeCache, // a PublishedContentType cache
RoutesCache routesCache, // a RoutesCache
string previewToken) // a preview token string (or null if not previewing)
: base(previewToken.IsNullOrWhiteSpace() == false)
{
_cacheProvider = cacheProvider;
_globalSettings = globalSettings;
_routesCache = routesCache; // may be null for unit-testing
_contentTypeCache = contentTypeCache;
_domainCache = domainCache;
@@ -78,7 +81,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
}
// still have nothing? actually determine the id
hideTopLevelNode = hideTopLevelNode ?? GlobalSettings.HideTopLevelNodeFromPath; // default = settings
hideTopLevelNode = hideTopLevelNode ?? _globalSettings.HideTopLevelNodeFromPath; // default = settings
content = content ?? DetermineIdByRoute(preview, route, hideTopLevelNode.Value);
// cache if we have a content and not previewing
@@ -271,7 +274,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
}
// no domain, respect HideTopLevelNodeFromPath for legacy purposes
if (hasDomains == false && GlobalSettings.HideTopLevelNodeFromPath)
if (hasDomains == false && _globalSettings.HideTopLevelNodeFromPath)
{
if (node.Parent == null)
{

View File

@@ -2,6 +2,7 @@
using System.Linq;
using Umbraco.Core;
using Umbraco.Core.Cache;
using Umbraco.Core.Configuration;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
@@ -29,6 +30,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
private readonly IMediaService _mediaService;
private readonly IUserService _userService;
private readonly ICacheProvider _requestCache;
private readonly IGlobalSettings _globalSettings;
#region Constructors
@@ -41,11 +43,12 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IDocumentRepository documentRepository, IMediaRepository mediaRepository, IMemberRepository memberRepository,
ILogger logger,
IGlobalSettings globalSettings,
MainDom mainDom,
bool testing = false, bool enableRepositoryEvents = true)
: this(serviceContext, publishedContentTypeFactory, scopeProvider, requestCache, segmentProviders, publishedSnapshotAccessor,
documentRepository, mediaRepository, memberRepository,
logger, null, mainDom, testing, enableRepositoryEvents)
logger, globalSettings, null, mainDom, testing, enableRepositoryEvents)
{ }
// used in some tests
@@ -56,12 +59,13 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IDocumentRepository documentRepository, IMediaRepository mediaRepository, IMemberRepository memberRepository,
ILogger logger,
IGlobalSettings globalSettings,
PublishedContentTypeCache contentTypeCache,
MainDom mainDom,
bool testing, bool enableRepositoryEvents)
: this(serviceContext, publishedContentTypeFactory, scopeProvider, requestCache, Enumerable.Empty<IUrlSegmentProvider>(), publishedSnapshotAccessor,
documentRepository, mediaRepository, memberRepository,
logger, contentTypeCache, mainDom, testing, enableRepositoryEvents)
logger, globalSettings, contentTypeCache, mainDom, testing, enableRepositoryEvents)
{ }
private PublishedSnapshotService(ServiceContext serviceContext,
@@ -72,6 +76,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IDocumentRepository documentRepository, IMediaRepository mediaRepository, IMemberRepository memberRepository,
ILogger logger,
IGlobalSettings globalSettings,
PublishedContentTypeCache contentTypeCache,
MainDom mainDom,
bool testing, bool enableRepositoryEvents)
@@ -82,8 +87,9 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
_contentTypeCache = contentTypeCache
?? new PublishedContentTypeCache(serviceContext.ContentTypeService, serviceContext.MediaTypeService, serviceContext.MemberTypeService, publishedContentTypeFactory, logger);
_xmlStore = new XmlStore(serviceContext, scopeProvider, _routesCache, _contentTypeCache, segmentProviders, publishedSnapshotAccessor, mainDom, testing, enableRepositoryEvents,
documentRepository, mediaRepository, memberRepository);
_xmlStore = new XmlStore(serviceContext, scopeProvider, _routesCache,
_contentTypeCache, segmentProviders, publishedSnapshotAccessor, mainDom, testing, enableRepositoryEvents,
documentRepository, mediaRepository, memberRepository, globalSettings);
_domainService = serviceContext.DomainService;
_memberService = serviceContext.MemberService;
@@ -91,6 +97,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
_userService = serviceContext.UserService;
_requestCache = requestCache;
_globalSettings = globalSettings;
}
public override void Dispose()
@@ -115,7 +122,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
}
catch
{
errors = new[] { SystemFiles.ContentCacheXml };
errors = new[] { SystemFiles.GetContentCacheXml(_globalSettings) };
return false;
}
}
@@ -134,7 +141,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
var domainCache = new DomainCache(_domainService);
return new PublishedShapshot(
new PublishedContentCache(_xmlStore, domainCache, _requestCache, _contentTypeCache, _routesCache, previewToken),
new PublishedContentCache(_xmlStore, domainCache, _requestCache, _globalSettings, _contentTypeCache, _routesCache, previewToken),
new PublishedMediaCache(_xmlStore, _mediaService, _userService, _requestCache, _contentTypeCache),
new PublishedMemberCache(_xmlStore, _requestCache, _memberService, _contentTypeCache),
domainCache);

View File

@@ -7,6 +7,7 @@ using Umbraco.Core.Logging;
using Umbraco.Core.Scoping;
using Umbraco.Web.HealthCheck.Checks.DataIntegrity;
using LightInject;
using Umbraco.Core.Configuration;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Persistence.Repositories;
@@ -27,8 +28,11 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
factory.GetInstance<CacheHelper>().RequestCache,
factory.GetInstance<UrlSegmentProviderCollection>(),
factory.GetInstance<IPublishedSnapshotAccessor>(),
factory.GetInstance<IDocumentRepository>(), factory.GetInstance<IMediaRepository>(), factory.GetInstance<IMemberRepository>(),
factory.GetInstance<IDocumentRepository>(),
factory.GetInstance<IMediaRepository>(),
factory.GetInstance<IMemberRepository>(),
factory.GetInstance<ILogger>(),
factory.GetInstance<IGlobalSettings>(),
factory.GetInstance<MainDom>()));
// add the Xml cache health check (hidden from type finder)

View File

@@ -43,6 +43,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
private readonly IDocumentRepository _documentRepository;
private readonly IMediaRepository _mediaRepository;
private readonly IMemberRepository _memberRepository;
private readonly IGlobalSettings _globalSettings;
private XmlStoreFilePersister _persisterTask;
private volatile bool _released;
private bool _withRepositoryEvents;
@@ -61,8 +62,8 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
/// </summary>
/// <remarks>The default constructor will boot the cache, load data from file or database, /// wire events in order to manage changes, etc.</remarks>
public XmlStore(ServiceContext serviceContext, IScopeProvider scopeProvider, RoutesCache routesCache, PublishedContentTypeCache contentTypeCache,
IEnumerable<IUrlSegmentProvider> segmentProviders, IPublishedSnapshotAccessor publishedSnapshotAccessor, MainDom mainDom, IDocumentRepository documentRepository, IMediaRepository mediaRepository, IMemberRepository memberRepository)
: this(serviceContext, scopeProvider, routesCache, contentTypeCache, segmentProviders, publishedSnapshotAccessor, mainDom, false, false, documentRepository, mediaRepository, memberRepository)
IEnumerable<IUrlSegmentProvider> segmentProviders, IPublishedSnapshotAccessor publishedSnapshotAccessor, MainDom mainDom, IDocumentRepository documentRepository, IMediaRepository mediaRepository, IMemberRepository memberRepository, IGlobalSettings globalSettings)
: this(serviceContext, scopeProvider, routesCache, contentTypeCache, segmentProviders, publishedSnapshotAccessor, mainDom, false, false, documentRepository, mediaRepository, memberRepository, globalSettings)
{ }
// internal for unit tests
@@ -70,7 +71,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
// fixme - er, we DO have a DB?
internal XmlStore(ServiceContext serviceContext, IScopeProvider scopeProvider, RoutesCache routesCache, PublishedContentTypeCache contentTypeCache,
IEnumerable<IUrlSegmentProvider> segmentProviders, IPublishedSnapshotAccessor publishedSnapshotAccessor, MainDom mainDom,
bool testing, bool enableRepositoryEvents, IDocumentRepository documentRepository, IMediaRepository mediaRepository, IMemberRepository memberRepository)
bool testing, bool enableRepositoryEvents, IDocumentRepository documentRepository, IMediaRepository mediaRepository, IMemberRepository memberRepository, IGlobalSettings globalSettings)
{
if (testing == false)
EnsureConfigurationIsValid();
@@ -83,6 +84,8 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
_documentRepository = documentRepository;
_mediaRepository = mediaRepository;
_memberRepository = memberRepository;
_globalSettings = globalSettings;
_xmlFileName = IOHelper.MapPath(SystemFiles.GetContentCacheXml(_globalSettings));
_segmentProviders = segmentProviders;
if (testing)
@@ -107,7 +110,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
_mediaRepository = mediaRepository;
_memberRepository = memberRepository;
_xmlFileEnabled = false;
_xmlFileName = IOHelper.MapPath(SystemFiles.GetContentCacheXml(UmbracoConfig.For.GlobalSettings()));
// do not plug events, we may not have what it takes to handle them
}
@@ -121,7 +124,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
_memberRepository = memberRepository;
GetXmlDocument = getXmlDocument ?? throw new ArgumentNullException(nameof(getXmlDocument));
_xmlFileEnabled = false;
_xmlFileName = IOHelper.MapPath(SystemFiles.GetContentCacheXml(UmbracoConfig.For.GlobalSettings()));
// do not plug events, we may not have what it takes to handle them
}
@@ -630,7 +633,7 @@ AND (umbracoNode.id=@id)";
#region File
private readonly string _xmlFileName = IOHelper.MapPath(SystemFiles.ContentCacheXml);
private readonly string _xmlFileName;
private DateTime _lastFileRead; // last time the file was read
private DateTime _nextFileCheck; // last time we checked whether the file was changed