c# - .net core 3.1 WorkerService 不加载配置选项/设置

标签 c# .net-core background-service

使用 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; }
}

worker

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"
  }
}

这将写:

MailSettings 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>();
        });

引用 Configuration in ASP.NET Core

引用 Options pattern in ASP.NET Core

关于c# - .net core 3.1 WorkerService 不加载配置选项/设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60080527/

相关文章:

flutter - 当 flutter 应用程序处于后台时,通知不会进入 Release模式

c# - 当不同程序集中的 Startup.cs 时,ASP.NET Core Web API 返回 404

c# - 在 C# mongodb 驱动程序中创建一个由唯一元素组成的数组

c# - 在 C# 中跟踪文件大小变化

c# - 在大文本文件中用\r\n 替换\n

c# - 使用 C# : A better design to perform validation in Value Objects 清理架构

java - 在后台服务中截取屏幕截图

c# - 如何在格式字符串中包含 AS-IS 输出的括号

c# - 犀牛模拟 : How to tell if object is mocked or real?