using System; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using StellaOps.DependencyInjection; using StellaOps.Feedser.Core.Jobs; using StellaOps.Feedser.Source.CertBund.Configuration; namespace StellaOps.Feedser.Source.CertBund; public sealed class CertBundDependencyInjectionRoutine : IDependencyInjectionRoutine { private const string ConfigurationSection = "feedser:sources:cert-bund"; public IServiceCollection Register(IServiceCollection services, IConfiguration configuration) { ArgumentNullException.ThrowIfNull(services); ArgumentNullException.ThrowIfNull(configuration); services.AddCertBundConnector(options => { configuration.GetSection(ConfigurationSection).Bind(options); options.Validate(); }); services.AddTransient(); services.PostConfigure(options => { EnsureJob(options, CertBundJobKinds.Fetch, typeof(CertBundFetchJob)); }); return services; } private static void EnsureJob(JobSchedulerOptions options, string kind, Type jobType) { if (options.Definitions.ContainsKey(kind)) { return; } options.Definitions[kind] = new JobDefinition( kind, jobType, options.DefaultTimeout, options.DefaultLeaseDuration, CronExpression: null, Enabled: true); } }