using Hangfire; using Microsoft.Extensions.DependencyInjection; using System; namespace Kean.Infrastructure.Hangfire { /// <summary> /// ServiceCollection 扩展方法 /// </summary> public static class ServiceCollectionExtensions { /// <summary> /// 向服务描述中追加 Hangfire 配置 /// </summary> /// <param name="services">服务描述符</param> /// <param name="setupAction">配置项</param> /// <returns>服务描述符</returns> public static IServiceCollection AddHangfire(this IServiceCollection services, Action<HangfireOptions> setupAction) { var options = new HangfireOptions(); setupAction.Invoke(options); return services .AddHangfire(configuration => { configuration.SetDataCompatibilityLevel(CompatibilityLevel.Version_170) .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseRedisStorage(options.RedisStorage.ConnectionString, new() { Db = options.RedisStorage.Database }); }) .AddHangfireServer(options => options.SchedulePollingInterval = TimeSpan.FromSeconds(1)) .AddHostedService(serviceProvider => new HostedService(options.RecurringJobs)); } } }