【问题标题】:How can I use Configuration in Net Core 6 worker app?如何在 Net Core 6 worker 应用程序中使用配置?
【发布时间】:2022-01-04 02:21:28
【问题描述】:

有关使用配置的所有信息都从创建构建器开始

var builder = WebApplication.CreateBuilder(args);

随后使用

builder.Configuration.

配置,但在 Worker services WebApplication 不可用。

如何在 Microsoft.NET.Sdk.Worker 类型的项目中使用 Configuration?

【问题讨论】:

    标签: .net-core configuration worker


    【解决方案1】:

    首先你应该在CreateHostBuilder的时候加上ConfigureAppConfiguration

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>();
            })
            .ConfigureAppConfiguration((hostContext, configBuilder) =>
            {
                configBuilder
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json")
                    .AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true)
                    .Build();
            });
    

    然后,在 appsettings 中添加配置。YourEnv.json

      "worker": {
        "id": 12345,
        "name": "SimpleWorker",
        "delay": 1000
      }
    

    Worker构造函数中添加IConfiguration并使用它。

    Worker 类的完整示例:

    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private readonly IConfiguration _configuration;
    
        public Worker(ILogger<Worker> logger, IConfiguration configuration)
        {
            _logger = logger;
            _configuration = configuration;
        }
    
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            var workerConfig = _configuration.GetSection("worker").Get<SimpleWorkerConfig>();
            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation("Worker {id}:{name} running at: {time} with delay {delay}", 
                    workerConfig.Id, workerConfig.Name, DateTimeOffset.Now, workerConfig.Delay);
                await Task.Delay(workerConfig.Delay, stoppingToken);
            }
        }
    }
    
    public class SimpleWorkerConfig
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Delay { get; set; }
    }
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 2019-02-20
      • 2019-12-06
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      相关资源
      最近更新 更多