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:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user