using Microsoft.Extensions.Options; namespace Oqtane.Infrastructure { public class SiteOptionsManager : IOptions, IOptionsSnapshot where TOptions : class, new() { private readonly IOptionsFactory _factory; private readonly IOptionsMonitorCache _cache; // private cache public SiteOptionsManager(IOptionsFactory factory, IOptionsMonitorCache cache) { _factory = factory; _cache = cache; } public TOptions Value { get { return Get(Options.DefaultName); } } public virtual TOptions Get(string name) { name = name ?? Options.DefaultName; return _cache.GetOrAdd(name, () => _factory.Create(name)); } public void Reset() { _cache.Clear(); } } }