c# - .net core 3.1 WorkerService 未加载配置选项/设置
问题描述
使用 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.json和appsettings.development.json内容如下:
{
"mailsettings": {
"smtpserver": "mail.com"
}
}
这将写:
MailSettings SmtpServer:“空”
到控制台。它应该写
“邮件.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 中的参考选项模式
推荐阅读
- c# - 如何使用 TextBox 对 Listbox 中的所有数字求和?
- python - 用 JSON 中的字符串列表替换单词中的多个相等字符串
- python - 将变量和值传递给函数(通配符?)
- memory - Y86-64 ISA 中存储的条件标志在哪里?
- loops - 在这种情况下如何循环数组?
- angular - 查询参数更改后 canActivate 不触发
- javascript - Angular 组件之间的数据共享
- mysql - SQL for WP 删除具有多个元键和评论的用户
- java - 泽西 MessageBodyProviderNotFoundException
- java - 如何检测丢失的 MySQL 服务器但仍允许长时间运行的查询