using System; using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; using Oqtane.Infrastructure; using Oqtane.Models; namespace Microsoft.Extensions.DependencyInjection { public partial class OqtaneSiteOptionsBuilder { public IServiceCollection Services { get; set; } public OqtaneSiteOptionsBuilder(IServiceCollection services) { Services = services; } public OqtaneSiteOptionsBuilder AddSiteOptions( Action> action) where TOptions : class, new() { Services.TryAddSingleton, SiteOptionsCache>(); Services.AddSingleton, SiteOptions> (sp => new SiteOptions(action)); Services.TryAddTransient, SiteOptionsFactory>(); Services.TryAddScoped>(sp => BuildOptionsManager(sp)); Services.TryAddSingleton>(sp => BuildOptionsManager(sp)); return this; } private static SiteOptionsManager BuildOptionsManager(IServiceProvider sp) where TOptions : class, new() { var cache = ActivatorUtilities.CreateInstance(sp, typeof(SiteOptionsCache)); return (SiteOptionsManager)ActivatorUtilities.CreateInstance(sp, typeof(SiteOptionsManager), new[] { cache }); } } }