【问题标题】:.Net Core 3.1 Worker Service use Appsettings.json.Net Core 3.1 Worker Service 使用 Appsettings.json
【发布时间】:2020-06-06 01:20:44
【问题描述】:

我正在尝试从 appsettings.json 中为我的工作人员服务获取我的应用程序设置(我只是假设这是正确的做法)。我只是到目前为止,但实际上无法弄清楚如何使用 Worker.cs 中的 appsettings

这是我在 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>();
                });

添加工人阶级

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 类吗?
  • 继续添加@egnomerator

标签: c# asp.net-core service-worker


【解决方案1】:

除了在 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();
        }

        ...

}

【讨论】:

    猜你喜欢
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多