/// <summary> /// Configures Quartz services to underlying service collection. This API maybe change! /// </summary> public static IServiceCollection AddQuartz( this IServiceCollection services, NameValueCollection properties, Action <IServiceCollectionQuartzConfigurator>?configure = null) { services.AddOptions(); services.TryAddSingleton <MicrosoftLoggingProvider?>(serviceProvider => { var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); if (loggerFactory is null) { throw new InvalidOperationException($"{nameof(ILoggerFactory)} service is required"); } LogContext.SetCurrentLogProvider(loggerFactory); return(LogProvider.CurrentLogProvider as MicrosoftLoggingProvider); }); var schedulerBuilder = SchedulerBuilder.Create(properties); if (configure != null) { var target = new ServiceCollectionQuartzConfigurator(services, schedulerBuilder); configure(target); } // try to add services if not present with defaults, without overriding other configuration if (string.IsNullOrWhiteSpace(properties[StdSchedulerFactory.PropertySchedulerTypeLoadHelperType])) { services.TryAddSingleton(typeof(ITypeLoadHelper), typeof(SimpleTypeLoadHelper)); } if (string.IsNullOrWhiteSpace(properties[StdSchedulerFactory.PropertySchedulerJobFactoryType])) { // there's no explicit job factory defined, use MS version services.TryAddSingleton(typeof(IJobFactory), typeof(MicrosoftDependencyInjectionJobFactory)); } services.Configure <QuartzOptions>(options => { foreach (var key in schedulerBuilder.Properties.AllKeys) { options[key] = schedulerBuilder.Properties[key]; } }); services.TryAddSingleton <ContainerConfigurationProcessor>(); services.TryAddSingleton <ISchedulerFactory, ServiceCollectionSchedulerFactory>(); // Note: TryAddEnumerable() is used here to ensure the initializers are registered only once. services.TryAddEnumerable(new[] { ServiceDescriptor.Singleton <IPostConfigureOptions <QuartzOptions>, QuartzConfiguration>() }); return(services); }
internal ServiceCollectionQuartzConfigurator( IServiceCollection collection, SchedulerBuilder schedulerBuilder) { services = collection; this.schedulerBuilder = schedulerBuilder; }
/// <summary> /// Configures Quartz services to underlying service collection. This API maybe change! /// </summary> public static IServiceCollection AddQuartz( this IServiceCollection services, Action <IServiceCollectionQuartzConfigurator>?configure = null) { var builder = new ServiceCollectionQuartzConfigurator(services, SchedulerBuilder.Create()); configure?.Invoke(builder); services.AddSingleton <ISchedulerFactory>(serviceProvider => { // try standard appsettings.json var config = serviceProvider.GetService <IConfiguration>(); var section = config.GetSection("Quartz"); var options = new NameValueCollection(); foreach (var kvp in section.GetChildren()) { options.Set(kvp.Key, kvp.Value); } // now override with programmatic configuration foreach (string?key in builder.Properties.Keys) { options.Set(key, builder.Properties[key]); } return(new ServiceCollectionSchedulerFactory(serviceProvider, options)); }); return(services); }
public static SchedulerBuilder UseXmlSchedulingConfiguration( this SchedulerBuilder schedulerBuilder, Action <XmlSchedulingOptions> configure) { schedulerBuilder.SetProperty("quartz.plugin.xml.type", typeof(XMLSchedulingDataProcessorPlugin).AssemblyQualifiedNameWithoutVersion()); configure.Invoke(new XmlSchedulingOptions(schedulerBuilder)); return(schedulerBuilder); }
public static IServiceCollection AddQuartz( this IServiceCollection services, Action <IServiceCollectionQuartzConfigurator>?configure = null) { var builder = new ServiceCollectionQuartzConfigurator(services, SchedulerBuilder.Create()); configure?.Invoke(builder); services.AddSingleton <ISchedulerFactory>(serviceProvider => new ServiceCollectionSchedulerFactory(serviceProvider, builder)); return(services); }
/// <summary> /// Configures Quartz services to underlying service collection. This API maybe change! /// </summary> public static IServiceCollection AddQuartz( this IServiceCollection services, NameValueCollection properties, Action <IServiceCollectionQuartzConfigurator>?configure = null) { services.AddOptions(); services.TryAddSingleton <MicrosoftLoggingProvider?>(serviceProvider => { var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); if (loggerFactory is null) { throw new InvalidOperationException($"{nameof(ILoggerFactory)} service is required"); } LogContext.SetCurrentLogProvider(loggerFactory); return(LogProvider.CurrentLogProvider as MicrosoftLoggingProvider); }); // Note that we can't call UseSimpleTypeLoader(), as that would overwrite any other configured type loaders services.TryAddSingleton(typeof(ITypeLoadHelper), typeof(SimpleTypeLoadHelper)); var schedulerBuilder = SchedulerBuilder.Create(properties); if (configure != null) { var target = new ServiceCollectionQuartzConfigurator(services, schedulerBuilder); configure(target); } services.Configure <QuartzOptions>(options => { foreach (var key in schedulerBuilder.Properties.AllKeys) { options[key] = schedulerBuilder.Properties[key]; } }); services.TryAddSingleton <ContainerConfigurationProcessor>(); services.TryAddSingleton <ISchedulerFactory, ServiceCollectionSchedulerFactory>(); // Note: TryAddEnumerable() is used here to ensure the initializers are registered only once. services.TryAddEnumerable(new [] { ServiceDescriptor.Singleton <IPostConfigureOptions <QuartzOptions>, QuartzConfiguration>() }); return(services); }
/// <summary> /// Configures Quartz services to underlying service collection. This API maybe change! /// </summary> public static IServiceCollection AddQuartz( this IServiceCollection services, Action <IServiceCollectionQuartzConfigurator>?configure = null) { services.TryAddSingleton <MicrosoftLoggingProvider?>(serviceProvider => { var loggerFactory = serviceProvider.GetRequiredService <ILoggerFactory>(); if (loggerFactory != null) { LogContext.SetCurrentLogProvider(loggerFactory); } return(LogProvider.CurrentLogProvider as MicrosoftLoggingProvider); }); var builder = new ServiceCollectionQuartzConfigurator(services, SchedulerBuilder.Create()); configure?.Invoke(builder); // Note that we can't call UseSimpleTypeLoader(), as that would overwrite any other configured type loaders services.TryAddSingleton(typeof(ITypeLoadHelper), typeof(SimpleTypeLoadHelper)); services.AddSingleton <ISchedulerFactory>(serviceProvider => { // try standard appsettings.json var config = serviceProvider.GetService <IConfiguration>(); var section = config.GetSection("Quartz"); var options = new NameValueCollection(); foreach (var kvp in section.GetChildren()) { options.Set(kvp.Key, kvp.Value); } // now override with programmatic configuration foreach (string?key in builder.Properties.Keys) { options.Set(key, builder.Properties[key]); } return(new ServiceCollectionSchedulerFactory(serviceProvider, options)); }); return(services); }
public static SchedulerBuilder UseTimeZoneConverter(this SchedulerBuilder schedulerBuilder) { schedulerBuilder.SetProperty("quartz.plugin.timeZoneConverter.type", typeof(TimeZoneConverterPlugin).AssemblyQualifiedNameWithoutVersion()); return(schedulerBuilder); }
protected internal MemoryStoreOptions(SchedulerBuilder parent) : base(parent) { }