.Net Core 3.1 Worker 服务使用 Appsettings.json
.Net Core 3.1 Worker Service use Appsettings.json
我正在尝试从 appsettings.json 中获取我的工作人员服务的应用程序设置(我只是假设这是正确的做法)。我只知道到目前为止,但实际上无法弄清楚如何使用 Worker.cs
中的应用程序设置
这是我在 Program.cs
中的内容
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostContext, config) =>
{
// Configure the app here.
config
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", optional: true);
config.AddEnvironmentVariables();
})
.ConfigureServices((hostContext, services) =>
{
services.AddHttpClient();
services.AddHostedService<Worker>();
});
添加工人class
public class Worker : BackgroundService
{
private const int ThreadDelay = 5000;
private readonly ILogger<Worker> _logger;
private readonly HttpClient _httpClient;
private readonly JsonSerializer _serializer;
public Worker(ILogger<Worker> logger, IHttpClientFactory httpClient)
{
_logger = logger;
_httpClient = httpClient.CreateClient();
_serializer = new JsonSerializer();
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
var locations = GetLocations(stoppingToken);
foreach(var item in locations)
{
}
//lets start the thread again in 5 minutes
await Task.Delay(ThreadDelay, stoppingToken);
}
}
private string GetLocations(CancellationToken stoppingToken)
{
var result = string.Empty;
var response = _httpClient.GetAsync($"https://", stoppingToken);
return result;
}
private async Task TriggerPoll(CancellationToken stoppingToken)
{
var response = await _httpClient.GetAsync($"https://", stoppingToken);
}
除了在 Worker
构造函数中需要一个 IConfiguration
实例之外,您似乎已经拥有所需的东西,因此框架的依赖注入容器将提供它。
在下面的小改动之后,从 appsettings 中获取一个值,如下所示:_configuration["key"]
public class Worker : BackgroundService
{
private const int ThreadDelay = 5000;
private readonly IConfiguration _configuration;
private readonly ILogger<Worker> _logger;
private readonly HttpClient _httpClient;
private readonly JsonSerializer _serializer;
public Worker(IConfiguration configuration, ILogger<Worker> logger, IHttpClientFactory httpClient)
{
_configuration = configuration;
_logger = logger;
_httpClient = httpClient.CreateClient();
_serializer = new JsonSerializer();
}
...
}
我正在尝试从 appsettings.json 中获取我的工作人员服务的应用程序设置(我只是假设这是正确的做法)。我只知道到目前为止,但实际上无法弄清楚如何使用 Worker.cs
中的应用程序设置这是我在 Program.cs
中的内容public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostContext, config) =>
{
// Configure the app here.
config
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", optional: true);
config.AddEnvironmentVariables();
})
.ConfigureServices((hostContext, services) =>
{
services.AddHttpClient();
services.AddHostedService<Worker>();
});
添加工人class
public class Worker : BackgroundService
{
private const int ThreadDelay = 5000;
private readonly ILogger<Worker> _logger;
private readonly HttpClient _httpClient;
private readonly JsonSerializer _serializer;
public Worker(ILogger<Worker> logger, IHttpClientFactory httpClient)
{
_logger = logger;
_httpClient = httpClient.CreateClient();
_serializer = new JsonSerializer();
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
var locations = GetLocations(stoppingToken);
foreach(var item in locations)
{
}
//lets start the thread again in 5 minutes
await Task.Delay(ThreadDelay, stoppingToken);
}
}
private string GetLocations(CancellationToken stoppingToken)
{
var result = string.Empty;
var response = _httpClient.GetAsync($"https://", stoppingToken);
return result;
}
private async Task TriggerPoll(CancellationToken stoppingToken)
{
var response = await _httpClient.GetAsync($"https://", stoppingToken);
}
除了在 Worker
构造函数中需要一个 IConfiguration
实例之外,您似乎已经拥有所需的东西,因此框架的依赖注入容器将提供它。
在下面的小改动之后,从 appsettings 中获取一个值,如下所示:_configuration["key"]
public class Worker : BackgroundService
{
private const int ThreadDelay = 5000;
private readonly IConfiguration _configuration;
private readonly ILogger<Worker> _logger;
private readonly HttpClient _httpClient;
private readonly JsonSerializer _serializer;
public Worker(IConfiguration configuration, ILogger<Worker> logger, IHttpClientFactory httpClient)
{
_configuration = configuration;
_logger = logger;
_httpClient = httpClient.CreateClient();
_serializer = new JsonSerializer();
}
...
}