private static void ConfigureHangfire(IGlobalConfiguration config, IContainer container) { config.UseAutofacActivator(container); }
public async Task StartAsync(CancellationToken cancellationToken) { SetConfiguration(); ServiceCollections = new ServiceCollection(); ConfigureServices(ServiceCollections); ILogger <Program> logger = ServiceProvider.GetService <ILogger <Program> >(); logger.LogInformation("启动服务"); try { //var doPublishEventTestService = ServiceProvider.GetService<DoPublishEventTestService>(); //await doPublishEventTestService.OnStart(); //Console.WriteLine("123"); //使用Autofac必须再全局配置GlobalConfiguration.Configuration.UseRedisStorage后面启用, //且创建BackgroundJobServer必须放在UseAutofacActivator方法后面,不然无效。 // 部分问题:BackgroundJobServer以全局实例注入后,无法获取到 _redisStorage.UseAutofacActivator(ApplicationContainer); //ServiceCollections.AddSingleton(redisStorage); foreach (var backgroundJobServerOption in JobServerOptionsList) { //如要按队列来分配后台作业服务器,则可创建多个后台作业服务器实例 var backgroundJobServer = new BackgroundJobServer(backgroundJobServerOption, _redisStorage.Entry); _backgroundJobServerList.Add(backgroundJobServer); } //_backgroundJobServer ??= new BackgroundJobServer(JobServerOptions); // Autofac接管前可用 //ServiceCollections.AddSingleton(_backgroundJobServer); // Autofac接管后需要用Aufofac的注入 //AppContainerBuilder.RegisterInstance(_backgroundJobServer).SingleInstance(); //AppContainerBuilder.RegisterInstance<BackgroundJobServer>(_backgroundJobServer).SingleInstance(); //BackgroundJob.Enqueue<TestJob>(x => x.CallUrl("https://www.qq.com", "ConsoleServerJob")); //BackgroundJob.Enqueue<GetNewsJob>(x => x.GetNewsByUrl("https://www.qq.com", "获取腾讯新闻")); var backgroundJobServer2 = ServiceProvider.GetService <BackgroundJobServer>(); var backgroundJobClient = ServiceProvider.GetService <IBackgroundJobClient>(); //注意,执行job方法里 的PerformContext参数必须填null backgroundJobClient.Enqueue <GetNewsJob>(t => t.GetBaiduNews("获取百度新闻1111123", null)); } catch (Exception ex) { Console.WriteLine("启动出错"); logger.LogError("启动报错:" + ex); /* * if (_backgroundJobServer != null) * { * await _backgroundJobServer.WaitForShutdownAsync(cancellationToken); * _backgroundJobServer.SendStop(); * _backgroundJobServer.Dispose(); * } */ if (_backgroundJobServerList.Count > 1) { foreach (var backgroundJobServer in _backgroundJobServerList) { await backgroundJobServer.WaitForShutdownAsync(cancellationToken); backgroundJobServer.SendStop(); backgroundJobServer.Dispose(); } } Console.ReadKey(); } //return Task.CompletedTask; }