[英].net core 3.1 WorkerService not loading configuration options/settings
Using the stock project template for WorkerService (.net core 3.1) I can't get IOptions<x>
to work.使用 WorkerService (.net core 3.1) 的股票项目模板我无法让
IOptions<x>
工作。
Here's a minimal reproduction:这是一个最小的复制:
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>();
});
}
mailsettings邮件设置
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.json and appsettings.development.json content follows: appsettings.json和appsettings.development.json内容如下:
{
"mailsettings": {
"smtpserver": "mail.com"
}
}
This will write:这将写:
MailSettings SmtpServer: " null "
邮件设置 SmtpServer: " null "
to the console.到控制台。 It should write
应该写
"mail.com".
“mail.com”。
I've tried a ton a guesses... but can't get anywhere.我已经尝试了很多猜测......但无处可去。
The mail settings was not configured into the service collection, so the DI container is unable to resolve IOPtions<mailsettings>
邮件设置未配置到服务集合中,因此 DI 容器无法解析
IOPtions<mailsettings>
Call Configure<TOPtions>
on the service collection在服务集合上调用
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>();
});
Reference Configuration in ASP.NET Core ASP.NET Core 中的参考配置
Reference Options pattern in ASP.NET Core ASP.NET Core 中的参考选项模式
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.