Я пытаюсь реализовать запуск метода в моем console application with Hangfire
.
Вот так выглядит мой Program class
:
internal class Program
{
private static IServiceProvider Provider { get; set; }
private static void Main(string[] args)
{
Program program = new Program();
program.ConfigureDI();
program.InitializeScheduledJob("* * * * *");
}
private void ConfigureDI()
{
var configuration = GetConfiguration();
var services = new ServiceCollection();
services.AddSingleton<IConfiguration>(configuration);
services.AddScoped<ITestService, TestService>();
Provider = services.BuildServiceProvider();
}
private IConfigurationRoot GetConfiguration()
{
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile($"appsettings.{environmentName}.json", true, true);
return configurationBuilder.Build();
}
private void InitializeScheduledJob(string cron)
{
var testService = Provider.GetService<ITestService>();
var configuration = Provider.GetService<IConfiguration>();
var scheduledJobId = configuration.GetSection("ScheduledJobId");
var hangfireConnectionString = configuration.GetSection("ConnectionStrings:HangfireConnection");
GlobalConfiguration.Configuration.UsePostgreSqlStorage(hangfireConnectionString.Value, new PostgreSqlStorageOptions { QueuePollInterval = TimeSpan.FromSeconds(1) });
using (var server = new BackgroundJobServer())
{
RecurringJob.AddOrUpdate(scheduledJobId.Value, () => testService.TestMethodAsync(), cron);
}
}
}
Как вы можете видеть, я использую DIв приложении, и я пытаюсь вызвать метод TestMethodAsync
в службе TestService
, но, несмотря на добавление его в качестве повторяющегося задания, он никогда не вызывается.
В чем может быть проблема?