#17816: Caching sitesettings.

--HG--
branch : 1.x
This commit is contained in:
Andre Rodrigues
2011-06-03 10:54:26 -07:00
parent cf69b8b2ae
commit 84dfae22ac
7 changed files with 184 additions and 6 deletions

View File

@@ -208,6 +208,7 @@
<Compile Include="Settings\Commands\SiteSettingsCommands.cs" />
<Compile Include="Settings\Models\SiteSettings2Part.cs" />
<Compile Include="Settings\Models\SiteSettings2PartRecord.cs" />
<Compile Include="Settings\Models\SiteSettingsCache.cs" />
<Compile Include="Settings\ResourceManifest.cs" />
<Compile Include="Settings\Migrations.cs" />
<Compile Include="Settings\Drivers\SiteSettingsPartDriver.cs" />

View File

@@ -0,0 +1,18 @@
--- Orchard.Core.csproj
+++ Orchard.Core.csproj
@@ -18,6 +18,7 @@
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation />
<TargetFrameworkProfile />
+ <UseIISExpress>false</UseIISExpress>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@@ -200,6 +201,7 @@
<Compile Include="Scheduling\Services\ScheduledTaskManager.cs" />
<Compile Include="Scheduling\Services\ScheduledTaskExecutor.cs" />
<Compile Include="Scheduling\Models\Task.cs" />
+ <Compile Include="Settings\Models\SiteSettingsCache.cs" />
<Compile Include="Settings\Models\SiteSettings2Part.cs" />
<Compile Include="Settings\Models\SiteSettings2PartRecord.cs" />
<Compile Include="Settings\ResourceManifest.cs" />

View File

@@ -1,4 +1,5 @@
using JetBrains.Annotations;
using System;
using JetBrains.Annotations;
using Orchard.Core.Settings.Models;
using Orchard.Data;
using Orchard.ContentManagement.Handlers;
@@ -11,6 +12,14 @@ namespace Orchard.Core.Settings.Handlers {
Filters.Add(new ActivatingFilter<SiteSettings2Part>("Site"));
Filters.Add(StorageFilter.For(repository));
Filters.Add(StorageFilter.For(repository2));
OnInitializing<SiteSettingsPart>(InitializeSiteSettings);
}
private static void InitializeSiteSettings(InitializingContentContext initializingContentContext, SiteSettingsPart siteSettingsPart) {
siteSettingsPart.Record.SiteSalt = Guid.NewGuid().ToString("N");
siteSettingsPart.Record.SiteName = "My Orchard Project Application";
siteSettingsPart.Record.PageTitleSeparator = " - ";
}
}
}

View File

@@ -0,0 +1,141 @@
using Orchard.ContentManagement;
using Orchard.Settings;
namespace Orchard.Core.Settings.Models {
public class SiteSettingsCache : ISite {
private readonly int _id;
private SiteSettingsPart _siteSettingsPart;
private string _pageTitleSeparator;
private string _siteName;
private string _siteSalt;
private string _superUser;
private string _homePage;
private string _siteCulture;
private ResourceDebugMode _resourceDebugMode;
private int _pageSize;
private string _baseUrl;
public SiteSettingsCache(ISite site) {
_id = site.Id;
_pageTitleSeparator = site.PageTitleSeparator;
_siteName = site.SiteName;
_siteSalt = site.SiteSalt;
_superUser = site.SuperUser;
_homePage = site.HomePage;
_siteCulture = site.SiteCulture;
_resourceDebugMode = site.ResourceDebugMode;
_pageSize = site.PageSize;
_baseUrl = site.BaseUrl;
}
public int Id {
get { return _id; }
}
public string PageTitleSeparator {
get { return _pageTitleSeparator; }
set {
_pageTitleSeparator = value;
SiteSettingsPart.PageTitleSeparator = value;
}
}
public string SiteName {
get { return _siteName; }
set {
_siteName = value;
SiteSettingsPart.SiteName = value;
}
}
public string SiteSalt {
get { return _siteSalt; }
set {
_siteSalt = value;
SiteSettingsPart.Record.SiteSalt = value;
}
}
public string SuperUser {
get { return _superUser; }
set {
_superUser = value;
SiteSettingsPart.SuperUser = value;
}
}
public string HomePage {
get { return _homePage; }
set {
_homePage = value;
SiteSettingsPart.HomePage = value;
}
}
public string SiteCulture {
get { return _siteCulture; }
set {
_siteCulture = value;
SiteSettingsPart.SiteCulture = value;
}
}
public ResourceDebugMode ResourceDebugMode {
get { return _resourceDebugMode; }
set {
_resourceDebugMode = value;
SiteSettingsPart.ResourceDebugMode = value;
}
}
public int PageSize {
get { return _pageSize; }
set {
_pageSize = value;
SiteSettingsPart.PageSize = value;
}
}
public string BaseUrl {
get { return _baseUrl; }
set {
_baseUrl = value;
SiteSettingsPart.BaseUrl = value;
}
}
public ContentItem ContentItem {
get { return SiteSettingsPart.ContentItem; }
}
private ISiteService SiteService { get; set; }
private SiteSettingsPart SiteSettingsPart {
get {
if (_siteSettingsPart == null) {
_siteSettingsPart = SiteService.GetSiteSettingsPart() as SiteSettingsPart;
}
return _siteSettingsPart;
}
set { _siteSettingsPart = value; }
}
public void ResetCache(ISiteService siteService) {
SiteService = siteService;
SiteSettingsPart = null;
}
}
}

View File

@@ -20,23 +20,27 @@ namespace Orchard.Core.Settings.Services {
ICacheManager cacheManager) {
_contentManager = contentManager;
_cacheManager = cacheManager;
Logger = NullLogger.Instance;
}
public ILogger Logger { get; set; }
public ISite GetSiteSettings() {
SiteSettingsCache siteSettingsCache = _cacheManager.Get("SiteSettings",
ctx => new SiteSettingsCache(GetSiteSettingsPart()));
siteSettingsCache.ResetCache(this);
return siteSettingsCache;
}
public ISite GetSiteSettingsPart() {
var siteId = _cacheManager.Get("SiteId", ctx => {
var site = _contentManager.Query("Site")
.Slice(0, 1)
.FirstOrDefault();
if (site == null) {
site = _contentManager.Create<SiteSettingsPart>("Site", item => {
item.Record.SiteSalt = Guid.NewGuid().ToString("N");
item.Record.SiteName = "My Orchard Project Application";
item.Record.PageTitleSeparator = " - ";
}).ContentItem;
site = _contentManager.Create<SiteSettingsPart>("Site").ContentItem;
}
return site.Id;