繁体   English   中英

.net core 3.1 WorkerService 未加载配置选项/设置

[英].net core 3.1 WorkerService not loading configuration options/settings

使用 WorkerService (.net core 3.1) 的股票项目模板我无法让IOptions<x>工作。

这是一个最小的复制:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseConsoleLifetime()
            .ConfigureServices((hostContext, services) =>
            {
                services.AddOptions();
                services.AddHostedService<Worker>();
            });
}

邮件设置

public class mailsettings
{
    public string smtpserver { get; set; }
}

工人

public class Worker : BackgroundService
{
    private readonly mailsettings _mailsettings;

    public Worker(IOptions<mailsettings> mailsettings)
    {
        _mailsettings = mailsettings.Value;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            Console.WriteLine($"MailSettings SmtpServer: \"{(_mailsettings.smtpserver ?? "**null**")}\"");
            Console.WriteLine(Directory.GetCurrentDirectory());
            await Task.Delay(1000, stoppingToken);
        }
    }
}

appsettings.jsonappsettings.development.json内容如下:

{
  "mailsettings": {
    "smtpserver": "mail.com"
  }
}

这将写:

邮件设置 SmtpServer: " null "

到控制台。 应该写

“mail.com”。

我已经尝试了很多猜测......但无处可去。

邮件设置未配置到服务集合中,因此 DI 容器无法解析IOPtions<mailsettings>

在服务集合上调用Configure<TOPtions>

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .UseConsoleLifetime()
        .ConfigureServices((hostContext, services) => {
            services
                .AddOptions()
                .Configure<mailsettings>(hostContext.Configuration.GetSection("mailsettings"))
                .AddHostedService<Worker>();
        });

ASP.NET Core 中的参考配置

ASP.NET Core 中的参考选项模式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM