Делегат, переданный на services.AddScoped()
, выполняется только при создании новой области (т. Е. В начале HTTP-запроса для приложений ASP.NET). Это объясняет, почему cfg
равно null
, когда вызывается AddSingleton()
.
Что-то вроде этого должно работать:
services.AddScoped<DB.Calendar.Repo>(x => {
var cfg = Configuration.GetSection("AppSettings:" + x.GetService<IHttpContextAccessor>()?.HttpContext?.Request?.Headers["xxx"]);
return new DB.Calendar.Repo(cfg);
});
Как только у вас все заработает, это будетразумно переместить логику, которая читает правильный раздел конфигурации, в свой собственный сервис, чтобы сделать его более тестируемым (а также сделать его более чистым).