C# .net core 3.1 WorkerService未加载配置选项/设置
使用WorkerService(.net core 3.1)的库存项目模板,我无法使C# .net core 3.1 WorkerService未加载配置选项/设置,c#,.net-core,background-service,C#,.net Core,Background Service,使用WorkerService(.net core 3.1)的库存项目模板,我无法使IOptions正常工作 这是一个最小的复制: public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[]
IOptions
正常工作
这是一个最小的复制:
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 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);
}
}
}
这将写:
邮件设置SmtpServer:null“
到控制台。它应该写
“mail.com”
我已经猜了很多了。。。但是哪儿也去不了 邮件设置未配置到服务集合中,因此DI容器无法解析
IOPtions
调用服务集合上的Configure
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseConsoleLifetime()
.ConfigureServices((hostContext, services) => {
services
.AddOptions()
.Configure<mailsettings>(hostContext.Configuration.GetSection("mailsettings"))
.AddHostedService<Worker>();
});
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.UseConsoleLifetime()文件
.ConfigureServices((主机上下文,服务)=>{
服务
.AddOptions()
.Configure(hostContext.Configuration.GetSection(“邮件设置”))
.AddHostedService();
});
参考文献
参考文献
{
"mailsettings": {
"smtpserver": "mail.com"
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseConsoleLifetime()
.ConfigureServices((hostContext, services) => {
services
.AddOptions()
.Configure<mailsettings>(hostContext.Configuration.GetSection("mailsettings"))
.AddHostedService<Worker>();
});