remove SiteSettings from Alias for better separation of concerns

This commit is contained in:
Shaun Walker
2022-03-27 19:47:52 -04:00
parent b92a888583
commit f9432acf1b
13 changed files with 78 additions and 84 deletions

View File

@ -1,3 +1,4 @@
using System.Collections.Generic;
using Oqtane.Models;
namespace Oqtane.Infrastructure
@ -5,6 +6,6 @@ namespace Oqtane.Infrastructure
public interface ISiteOptions<TOptions>
where TOptions : class, new()
{
void Configure(TOptions options, Alias alias);
void Configure(TOptions options, Alias alias, Dictionary<string, string> sitesettings);
}
}

View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using Oqtane.Models;
namespace Oqtane.Infrastructure
@ -6,16 +7,16 @@ namespace Oqtane.Infrastructure
public class SiteOptions<TOptions> : ISiteOptions<TOptions>
where TOptions : class, new()
{
private readonly Action<TOptions, Alias> configureOptions;
private readonly Action<TOptions, Alias, Dictionary<string, string>> configureOptions;
public SiteOptions(Action<TOptions, Alias> configureOptions)
public SiteOptions(Action<TOptions, Alias, Dictionary<string, string>> configureOptions)
{
this.configureOptions = configureOptions;
}
public void Configure(TOptions options, Alias alias)
public void Configure(TOptions options, Alias alias, Dictionary<string, string> sitesettings)
{
configureOptions(options, alias);
configureOptions(options, alias, sitesettings);
}
}
}

View File

@ -1,5 +1,7 @@
using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using Oqtane.Extensions;
namespace Oqtane.Infrastructure
{
@ -9,14 +11,14 @@ namespace Oqtane.Infrastructure
private readonly IConfigureOptions<TOptions>[] _configureOptions;
private readonly IPostConfigureOptions<TOptions>[] _postConfigureOptions;
private readonly ISiteOptions<TOptions>[] _siteOptions;
private readonly IAliasAccessor _aliasAccessor;
private readonly IHttpContextAccessor _accessor;
public SiteOptionsFactory(IEnumerable<IConfigureOptions<TOptions>> configureOptions, IEnumerable<IPostConfigureOptions<TOptions>> postConfigureOptions, IEnumerable<ISiteOptions<TOptions>> siteOptions, IAliasAccessor aliasAccessor)
public SiteOptionsFactory(IEnumerable<IConfigureOptions<TOptions>> configureOptions, IEnumerable<IPostConfigureOptions<TOptions>> postConfigureOptions, IEnumerable<ISiteOptions<TOptions>> siteOptions, IHttpContextAccessor accessor)
{
_configureOptions = configureOptions as IConfigureOptions<TOptions>[] ?? new List<IConfigureOptions<TOptions>>(configureOptions).ToArray();
_postConfigureOptions = postConfigureOptions as IPostConfigureOptions<TOptions>[] ?? new List<IPostConfigureOptions<TOptions>>(postConfigureOptions).ToArray();
_siteOptions = siteOptions as ISiteOptions<TOptions>[] ?? new List<ISiteOptions<TOptions>>(siteOptions).ToArray();
_aliasAccessor = aliasAccessor;
_accessor = accessor;
}
public TOptions Create(string name)
@ -36,11 +38,11 @@ namespace Oqtane.Infrastructure
}
// override with site specific options
if (_aliasAccessor?.Alias != null)
if (_accessor.HttpContext?.GetAlias() != null && _accessor.HttpContext?.GetSiteSettings() != null)
{
foreach (var siteOption in _siteOptions)
{
siteOption.Configure(options, _aliasAccessor.Alias);
siteOption.Configure(options, _accessor.HttpContext.GetAlias(), _accessor.HttpContext.GetSiteSettings());
}
}