Используя шаблон готового проекта для 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>();
});
}
mailsettings
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: " null "
на консоли. Должно быть написано
"mail.com".
Я попробовал тонну догадок ... но никуда не деться.