Skip to content

Commit f88d3aa

Browse files
authored
Merge pull request #777 from poppastring/fix/reactive-config-settings
Fix captive dependency: make DasBlogSettings reactive to config changes
2 parents 35b7bc7 + 43ff51b commit f88d3aa

4 files changed

Lines changed: 26 additions & 34 deletions

File tree

source/DasBlog.Services/Interfaces/IDasBlogSettings.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ namespace DasBlog.Services
99
{
1010
public interface IDasBlogSettings : IUrlResolver, ITimeZoneService, IContentProcessor, IMailProvider, IUserManager
1111
{
12-
ISiteConfig SiteConfiguration { get; set; }
13-
IMetaTags MetaTags { get; set; }
12+
ISiteConfig SiteConfiguration { get; }
13+
IMetaTags MetaTags { get; }
1414
ISiteSecurityConfig SecurityConfiguration { get; }
1515

16-
IOEmbedProviders OEmbedProviders { get; set; }
16+
IOEmbedProviders OEmbedProviders { get; }
1717

1818
string WebRootDirectory { get; }
1919
}

source/DasBlog.Web/Controllers/AdminController.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ public IActionResult Settings(DasBlogSettingsViewModel settings)
8989
settings.Posts = posts;
9090
return View("Settings", settings);
9191
}
92-
dasBlogSettings.SiteConfiguration = site;
9392

9493
if (!fileSystemBinaryManager.SaveMetaConfig(meta))
9594
{
@@ -98,7 +97,6 @@ public IActionResult Settings(DasBlogSettingsViewModel settings)
9897
settings.Posts = posts;
9998
return View("Settings", settings);
10099
}
101-
dasBlogSettings.MetaTags = meta;
102100

103101
logger.LogInformation(new EventDataItem(EventCodes.Site, null, "Site settings updated"));
104102

source/DasBlog.Web/DasBlogServiceCollectionExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using DasBlog.Managers;
1+
using DasBlog.Managers;
22
using DasBlog.Managers.Interfaces;
33
using DasBlog.Services;
44
using DasBlog.Services.ActivityLogs;
@@ -63,6 +63,7 @@ public static IServiceCollection AddDasBlogManagers(this IServiceCollection serv
6363
public static IServiceCollection AddDasBlogServices(this IServiceCollection services, IWebHostEnvironment env)
6464
{
6565
services
66+
.AddSingleton<IDasBlogSettings, DasBlogSettings>()
6667
.AddSingleton(env.ContentRootFileProvider)
6768
.AddSingleton<SiteHttpContext>()
6869
.AddSingleton<IUserDataRepo, UserDataRepo>()
@@ -78,8 +79,7 @@ public static IServiceCollection AddDasBlogServices(this IServiceCollection serv
7879
.AddSingleton<IConfigFileService<SiteSecurityConfigData>, SiteSecurityConfigFileService>()
7980
.AddSingleton<IExternalEmbeddingHandler, ExternalEmbeddingHandler>();
8081

81-
services
82-
.AddTransient<IDasBlogSettings, DasBlogSettings>()
82+
services
8383
.AddTransient<IUserStore<DasBlogUser>, DasBlogUserStore>()
8484
.AddTransient<IRoleStore<DasBlogRole>, DasBlogUserRoleStore>()
8585
.AddTransient<IPrincipal>(provider => provider.GetService<IHttpContextAccessor>().HttpContext.User)

source/DasBlog.Web/Settings/DasBlogSettings.cs

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -24,54 +24,48 @@ public class DasBlogSettings : IDasBlogSettings
2424
{
2525
private readonly string siteSecurityConfigFilePath;
2626
private readonly ConfigFilePathsDataOption filePathDataOptions;
27-
27+
private readonly IOptionsMonitor<SiteConfig> siteConfigMonitor;
28+
private readonly IOptionsMonitor<MetaTags> metaTagsMonitor;
29+
private readonly IOptionsMonitor<OEmbedProviders> embedProvidersMonitor;
30+
2831
public DasBlogSettings(IWebHostEnvironment env, IOptionsMonitor<SiteConfig> siteConfig, IOptionsMonitor<MetaTags> metaTagsConfig,
29-
IOptionsMonitor<OEmbedProviders> embedProvidersConfig,
32+
IOptionsMonitor<OEmbedProviders> embedProvidersConfig,
3033
ISiteSecurityConfig siteSecurityConfig, IOptions<ConfigFilePathsDataOption> optionsAccessor)
3134
{
3235
WebRootDirectory = env.ContentRootPath;
33-
SiteConfiguration = siteConfig.CurrentValue;
34-
OEmbedProviders = embedProvidersConfig.CurrentValue;
36+
siteConfigMonitor = siteConfig;
37+
metaTagsMonitor = metaTagsConfig;
38+
embedProvidersMonitor = embedProvidersConfig;
3539
SecurityConfiguration = siteSecurityConfig;
36-
MetaTags = metaTagsConfig.CurrentValue;
3740
filePathDataOptions = optionsAccessor.Value;
3841

39-
RssUrl = RelativeToRoot("feed/rss");
40-
PingBackUrl = RelativeToRoot("feed/pingback");
41-
CategoryUrl = RelativeToRoot("category");
42-
ArchiveUrl = RelativeToRoot("archive");
43-
MicroSummaryUrl = RelativeToRoot("site/microsummary");
44-
RsdUrl = RelativeToRoot("feed/rsd");
45-
ShortCutIconUrl = RelativeToRoot(string.Format("theme/{0}/favicon.ico", SiteConfiguration.Theme));
46-
ThemeCssUrl = RelativeToRoot(string.Format("theme/{0}/custom.css", SiteConfiguration.Theme));
47-
4842
siteSecurityConfigFilePath = filePathDataOptions.SecurityConfigFilePath;
4943
}
5044

5145
public string WebRootDirectory { get; }
5246

53-
public string PingBackUrl { get; }
47+
public string PingBackUrl => RelativeToRoot("feed/pingback");
48+
49+
public string RssUrl => RelativeToRoot("feed/rss");
5450

55-
public string RssUrl { get; }
51+
public string CategoryUrl => RelativeToRoot("category");
5652

57-
public string CategoryUrl { get; }
53+
public string ArchiveUrl => RelativeToRoot("archive");
5854

59-
public string ArchiveUrl { get; }
55+
public string MicroSummaryUrl => RelativeToRoot("site/microsummary");
6056

61-
public string MicroSummaryUrl { get; }
57+
public string RsdUrl => RelativeToRoot("feed/rsd");
6258

63-
public string RsdUrl { get; }
59+
public string ShortCutIconUrl => RelativeToRoot(string.Format("theme/{0}/favicon.ico", SiteConfiguration.Theme));
6460

65-
public string ShortCutIconUrl { get; }
61+
public string ThemeCssUrl => RelativeToRoot(string.Format("theme/{0}/custom.css", SiteConfiguration.Theme));
6662

67-
public string ThemeCssUrl { get; }
68-
69-
public IMetaTags MetaTags { get; set; }
63+
public IMetaTags MetaTags => metaTagsMonitor.CurrentValue;
7064

71-
public ISiteConfig SiteConfiguration { get; set; }
65+
public ISiteConfig SiteConfiguration => siteConfigMonitor.CurrentValue;
7266

7367
public ISiteSecurityConfig SecurityConfiguration { get; }
74-
public IOEmbedProviders OEmbedProviders { get; set; }
68+
public IOEmbedProviders OEmbedProviders => embedProvidersMonitor.CurrentValue;
7569

7670
private static Regex htmlFilterRegex = new Regex("<(?<end>/)?(?<name>\\w+)((\\s+(?<attNameValue>(?<attName>\\w+)(\\s*=\\s*(?:\"(?<attVal>[^\"]*)\"|'(?<attVal>[^']*)'|(?<attVal>[^'\">\\s]+)))?))+\\s*|\\s*)(?<self>/)?>",
7771
RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled);

0 commit comments

Comments
 (0)