using System; using Autofac; using Nitride.Commands; using Nitride.Temporal.Cli; using Serilog; using Expires = Nitride.Temporal.Cli.ExpiresPipelineCommandOption; namespace Nitride.Temporal; public static class NitrideTemporalBuilderExtensions { /// /// Extends the builder to allow for configuring the temporal /// settings for generation. /// public static NitrideBuilder UseTemporal( this NitrideBuilder builder, Action? configure = null) { // Get the configuration so we can set the various options. var config = new NitrideTemporalConfiguration(); configure?.Invoke(config); // Add in the module registration. builder.ConfigureContainer( x => { // Register the module. x.RegisterModule(); // Add in the CLI options. if (config.AddDateOptionToCommandLine) { x.RegisterType().As(); } if (config.AddExpireOptionToCommandLine && config.Expiration != null) { x.Register( context => { ILogger logger = context.Resolve(); Timekeeper clock = context.Resolve(); return new Expires(logger, clock, config.Expiration); }) .As(); } }); if (config.DateTimeZone != null) { builder.ConfigureSite( (_, scope) => { ILogger logger = scope.Resolve(); Timekeeper timekeeper = scope.Resolve(); timekeeper.DateTimeZone = config.DateTimeZone; logger.Information("Setting time zone to {Zone}", timekeeper.DateTimeZone); }); } return builder; } }