ISystemDefaultCultureProvider

This commit is contained in:
Stephan
2018-04-27 17:36:50 +02:00
parent aa46e1e282
commit 8f13fa3ae5
15 changed files with 82 additions and 16 deletions

View File

@@ -256,10 +256,6 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
// do NOT leak that language, it's not deep-cloned!
private ILanguage GetDefault()
{
// FIXME
var temp = SqlContext.Sql();
if (temp == null) return null;
// get all cached, non-cloned
var all = TypedCachePolicy.GetAllCached(PerformGetAll);

View File

@@ -62,7 +62,7 @@ namespace Umbraco.Tests.Cache.PublishedCache
_xml.LoadXml(GetXml());
var xmlStore = new XmlStore(() => _xml, null, null, null);
var cacheProvider = new StaticCacheProvider();
var domainCache = new DomainCache(ServiceContext.DomainService, ServiceContext.LocalizationService);
var domainCache = new DomainCache(ServiceContext.DomainService, SystemDefaultCultureProvider);
var publishedShapshot = new Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedSnapshot(
new PublishedContentCache(xmlStore, domainCache, cacheProvider, globalSettings, new SiteDomainHelper(), ContentTypesCache, null, null),
new PublishedMediaCache(xmlStore, ServiceContext.MediaService, ServiceContext.UserService, cacheProvider, ContentTypesCache),

View File

@@ -90,7 +90,9 @@ namespace Umbraco.Tests.Scoping
publishedSnapshotAccessor,
Logger,
ScopeProvider,
documentRepository, mediaRepository, memberRepository, Container.GetInstance<IGlobalSettings>(), new SiteDomainHelper());
documentRepository, mediaRepository, memberRepository,
SystemDefaultCultureProvider,
Container.GetInstance<IGlobalSettings>(), new SiteDomainHelper());
}
protected UmbracoContext GetUmbracoContextNu(string url, int templateId = 1234, RouteData routeData = null, bool setSingleton = false, IUmbracoSettingsSection umbracoSettings = null, IEnumerable<IUrlProvider> urlProviders = null)

View File

@@ -32,6 +32,7 @@ using LightInject;
using Umbraco.Core.Migrations.Install;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Persistence.Repositories;
using Umbraco.Tests.Testing.Objects.AccessorsAndProviders;
namespace Umbraco.Tests.TestHelpers
{
@@ -77,6 +78,7 @@ namespace Umbraco.Tests.TestHelpers
Container.Register<ISqlSyntaxProvider, SqlCeSyntaxProvider>();
Container.Register(factory => PublishedSnapshotService);
Container.Register(factory => SystemDefaultCultureProvider);
Container.GetInstance<DataEditorCollectionBuilder>()
.Clear()
@@ -229,12 +231,16 @@ namespace Umbraco.Tests.TestHelpers
}
}
protected ISystemDefaultCultureProvider SystemDefaultCultureProvider { get; set; }
protected IPublishedSnapshotService PublishedSnapshotService { get; set; }
protected override void Initialize() // fixme - should NOT be here!
{
base.Initialize();
SystemDefaultCultureProvider = new TestSystemDefaultCultureProvider();
CreateAndInitializeDatabase();
// ensure we have a PublishedSnapshotService
@@ -264,6 +270,7 @@ namespace Umbraco.Tests.TestHelpers
ScopeProvider,
cache, publishedSnapshotAccessor,
Container.GetInstance<IDocumentRepository>(), Container.GetInstance<IMediaRepository>(), Container.GetInstance<IMemberRepository>(),
SystemDefaultCultureProvider,
Logger,
Container.GetInstance<IGlobalSettings>(), new SiteDomainHelper(),
ContentTypesCache,

View File

@@ -0,0 +1,9 @@
using Umbraco.Web.PublishedCache;
namespace Umbraco.Tests.Testing.Objects.AccessorsAndProviders
{
public class TestSystemDefaultCultureProvider : ISystemDefaultCultureProvider
{
public string DefaultCulture { get; set; }
}
}

View File

@@ -180,6 +180,7 @@
<Compile Include="TestHelpers\Stubs\TestExamineManager.cs" />
<Compile Include="TestHelpers\Stubs\TestPublishedContent.cs" />
<Compile Include="Testing\ContentBaseExtensions.cs" />
<Compile Include="Testing\Objects\AccessorsAndProviders\TestSystemDefaultCultureProvider.cs" />
<Compile Include="Testing\TestDatabase.cs" />
<Compile Include="Testing\TestingTests\NUnitTests.cs" />
<Compile Include="Persistence\LocksTests.cs" />
@@ -595,9 +596,7 @@
<Content Include="Services\Importing\uBlogsy-Package.xml" />
<Content Include="Services\Importing\XsltSearch-Package.xml" />
</ItemGroup>
<ItemGroup>
<Folder Include="Testing\Objects\" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>

View File

@@ -19,6 +19,7 @@ using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.Testing;
using Umbraco.Tests.Testing.Objects.AccessorsAndProviders;
using Umbraco.Web;
using Umbraco.Web.Models;
using Umbraco.Web.Mvc;
@@ -424,7 +425,8 @@ namespace Umbraco.Tests.Web.Mvc
var scopeProvider = TestObjects.GetScopeProvider(Mock.Of<ILogger>());
var factory = Mock.Of<IPublishedContentTypeFactory>();
_service = new PublishedSnapshotService(svcCtx, factory, scopeProvider, cache, Enumerable.Empty<IUrlSegmentProvider>(), null,
null, null, null,
null, null, null,
new TestSystemDefaultCultureProvider(),
Current.Logger, TestObjects.GetGlobalSettings(), new SiteDomainHelper(), null, true, false); // no events
var http = GetHttpContextFactory(url, routeData).HttpContext;

View File

@@ -0,0 +1,13 @@
namespace Umbraco.Web.PublishedCache
{
/// <summary>
/// Provides the system default culture.
/// </summary>
public interface ISystemDefaultCultureProvider
{
/// <summary>
/// Gets the system default culture.
/// </summary>
string DefaultCulture { get; }
}
}

View File

@@ -44,6 +44,7 @@ namespace Umbraco.Web.PublishedCache.NuCache
private readonly IMemberRepository _memberRepository;
private readonly IGlobalSettings _globalSettings;
private readonly ISiteDomainHelper _siteDomainHelper;
private readonly ISystemDefaultCultureProvider _systemDefaultCultureProvider;
// volatile because we read it with no lock
private volatile bool _isReady;
@@ -83,6 +84,7 @@ namespace Umbraco.Web.PublishedCache.NuCache
ServiceContext serviceContext, IPublishedContentTypeFactory publishedContentTypeFactory, IdkMap idkMap,
IPublishedSnapshotAccessor publishedSnapshotAccessor, ILogger logger, IScopeProvider scopeProvider,
IDocumentRepository documentRepository, IMediaRepository mediaRepository, IMemberRepository memberRepository,
ISystemDefaultCultureProvider systemDefaultCultureProvider,
IGlobalSettings globalSettings, ISiteDomainHelper siteDomainHelper)
: base(publishedSnapshotAccessor)
{
@@ -97,6 +99,7 @@ namespace Umbraco.Web.PublishedCache.NuCache
_documentRepository = documentRepository;
_mediaRepository = mediaRepository;
_memberRepository = memberRepository;
_systemDefaultCultureProvider = systemDefaultCultureProvider;
_globalSettings = globalSettings;
_siteDomainHelper = siteDomainHelper;
@@ -1014,7 +1017,7 @@ namespace Umbraco.Web.PublishedCache.NuCache
var memberTypeCache = new PublishedContentTypeCache(null, null, _serviceContext.MemberTypeService, _publishedContentTypeFactory, _logger);
var defaultCulture = _serviceContext.LocalizationService.GetDefaultLanguageIsoCode(); // capture - fast
var defaultCulture = _systemDefaultCultureProvider.DefaultCulture;
var domainCache = new DomainCache(domainSnap, defaultCulture);
var domainHelper = new DomainHelper(domainCache, _siteDomainHelper);

View File

@@ -0,0 +1,24 @@
using Umbraco.Core.Services;
namespace Umbraco.Web.PublishedCache
{
/// <summary>
/// Provides the default implementation of <see cref="ISystemDefaultCultureProvider"/>.
/// </summary>
public class SystemDefaultCultureProvider : ISystemDefaultCultureProvider
{
private readonly ILocalizationService _localizationService;
/// <summary>
/// Initializes a new instance of the <see cref="SystemDefaultCultureProvider"/> class.
/// </summary>
/// <param name="localizationService"></param>
public SystemDefaultCultureProvider(ILocalizationService localizationService)
{
_localizationService = localizationService;
}
/// <inheritdoc />
public string DefaultCulture => _localizationService.GetDefaultLanguageIsoCode(); // capture - fast
}
}

View File

@@ -11,10 +11,10 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
{
private readonly IDomainService _domainService;
public DomainCache(IDomainService domainService, ILocalizationService localizationService)
public DomainCache(IDomainService domainService, ISystemDefaultCultureProvider systemDefaultCultureProvider)
{
_domainService = domainService;
DefaultCulture = localizationService.GetDefaultLanguageIsoCode(); // capture - fast
DefaultCulture = systemDefaultCultureProvider.DefaultCulture;
}
public IEnumerable<Domain> GetAll(bool includeWildcards)

View File

@@ -32,7 +32,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
private readonly IUserService _userService;
private readonly ICacheProvider _requestCache;
private readonly IGlobalSettings _globalSettings;
private readonly ILocalizationService _localizationService;
private readonly ISystemDefaultCultureProvider _systemDefaultCultureProvider;
private readonly ISiteDomainHelper _siteDomainHelper;
#region Constructors
@@ -45,6 +45,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
IEnumerable<IUrlSegmentProvider> segmentProviders,
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IDocumentRepository documentRepository, IMediaRepository mediaRepository, IMemberRepository memberRepository,
ISystemDefaultCultureProvider systemDefaultCultureProvider,
ILogger logger,
IGlobalSettings globalSettings,
ISiteDomainHelper siteDomainHelper,
@@ -52,6 +53,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
bool testing = false, bool enableRepositoryEvents = true)
: this(serviceContext, publishedContentTypeFactory, scopeProvider, requestCache, segmentProviders, publishedSnapshotAccessor,
documentRepository, mediaRepository, memberRepository,
systemDefaultCultureProvider,
logger, globalSettings, siteDomainHelper, null, mainDom, testing, enableRepositoryEvents)
{ }
@@ -62,6 +64,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
ICacheProvider requestCache,
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IDocumentRepository documentRepository, IMediaRepository mediaRepository, IMemberRepository memberRepository,
ISystemDefaultCultureProvider systemDefaultCultureProvider,
ILogger logger,
IGlobalSettings globalSettings,
ISiteDomainHelper siteDomainHelper,
@@ -70,6 +73,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
bool testing, bool enableRepositoryEvents)
: this(serviceContext, publishedContentTypeFactory, scopeProvider, requestCache, Enumerable.Empty<IUrlSegmentProvider>(), publishedSnapshotAccessor,
documentRepository, mediaRepository, memberRepository,
systemDefaultCultureProvider,
logger, globalSettings, siteDomainHelper, contentTypeCache, mainDom, testing, enableRepositoryEvents)
{ }
@@ -80,6 +84,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
IEnumerable<IUrlSegmentProvider> segmentProviders,
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IDocumentRepository documentRepository, IMediaRepository mediaRepository, IMemberRepository memberRepository,
ISystemDefaultCultureProvider systemDefaultCultureProvider,
ILogger logger,
IGlobalSettings globalSettings,
ISiteDomainHelper siteDomainHelper,
@@ -101,7 +106,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
_memberService = serviceContext.MemberService;
_mediaService = serviceContext.MediaService;
_userService = serviceContext.UserService;
_localizationService = serviceContext.LocalizationService;
_systemDefaultCultureProvider = systemDefaultCultureProvider;
_requestCache = requestCache;
_globalSettings = globalSettings;
@@ -146,7 +151,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
// the current caches, but that would mean creating an extra cache (StaticCache
// probably) so better use RequestCache.
var domainCache = new DomainCache(_domainService, _localizationService);
var domainCache = new DomainCache(_domainService, _systemDefaultCultureProvider);
return new PublishedSnapshot(
new PublishedContentCache(_xmlStore, domainCache, _requestCache, _globalSettings, _siteDomainHelper, _contentTypeCache, _routesCache, previewToken),

View File

@@ -32,6 +32,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache
factory.GetInstance<IDocumentRepository>(),
factory.GetInstance<IMediaRepository>(),
factory.GetInstance<IMemberRepository>(),
factory.GetInstance<ISystemDefaultCultureProvider>(),
factory.GetInstance<ILogger>(),
factory.GetInstance<IGlobalSettings>(),
factory.GetInstance<ISiteDomainHelper>(),

View File

@@ -69,6 +69,9 @@ namespace Umbraco.Web.Runtime
//it still needs to use the install controller so we can't do that
composition.Container.RegisterFrom<InstallerCompositionRoot>();
// register the system culture provider
composition.Container.RegisterSingleton<ISystemDefaultCultureProvider, SystemDefaultCultureProvider>();
var typeLoader = composition.Container.GetInstance<TypeLoader>();
var logger = composition.Container.GetInstance<ILogger>();
var proflog = composition.Container.GetInstance<ProfilingLogger>();

View File

@@ -343,6 +343,7 @@
<Compile Include="PropertyEditors\ValueConverters\MultiNodeTreePickerValueConverter.cs" />
<Compile Include="PropertyEditors\ValueListUniqueValueValidator.cs" />
<Compile Include="PublishedCache\IPublishedSnapshot.cs" />
<Compile Include="PublishedCache\ISystemDefaultCultureProvider.cs" />
<Compile Include="PublishedCache\NuCache\DataSource\BTree.ContentDataSerializer.cs" />
<Compile Include="PublishedCache\NuCache\DataSource\BTree.ContentNodeKitSerializer.cs" />
<Compile Include="PublishedCache\NuCache\DataSource\BTree.DictionaryOfCultureVariationSerializer.cs" />
@@ -387,6 +388,7 @@
<Compile Include="PublishedCache\NuCache\SnapDictionary.cs" />
<Compile Include="PublishedCache\PublishedCacheBase.cs" />
<Compile Include="PublishedCache\PublishedContentTypeCache.cs" />
<Compile Include="PublishedCache\SystemDefaultCultureProvider.cs" />
<Compile Include="PublishedCache\UmbracoContextPublishedSnapshotAccessor.cs" />
<Compile Include="PublishedCache\XmlPublishedCache\DomainCache.cs" />
<Compile Include="PublishedCache\XmlPublishedCache\PublishedSnapshot.cs" />