配置服务时访问配置对象

Access configuration object while configuring services

在控制台应用程序中,我没有手动构建 IConfiguration 和 IServiceProvider,而是尝试使用 Host.CreateDefaultBuilder() 进程:

IHost host = Host.CreateDefaultBuilder()
    .ConfigureServices((context, services) =>
    {
        services.AddSingleton<Whatever>();
    })
    .Build();

我可以在构建主机后获取配置对象。但我正在寻找的是一种在 ConfigureServices 主体中获取配置对象的方法,以便我可以将配置部分绑定到服务提供商。

类似于:

AccountConfiguration accountConfig = new();
config.Bind("AccountConfiguration", accountConfig);
services.AddSingleton(accountConfig);
// or
services.Configure<AccountConfiguration>(config.GetSection("AccountConfiguration"));

有没有办法在配置服务的同时访问配置对象?或者在主机已经构建之后向服务集合添加对象的好方法?

传递给 ConfigureServices 的 lambda 的第一个参数是 HostBuilderContext,它公开配置 属性 - IConfiguration Configuration:

IHost host = Host.CreateDefaultBuilder()
    .ConfigureServices((context, services) =>
    {
        IConfiguration config = context.Configuration;
        // use config
        services.AddSingleton<Whatever>();
    })
    .Build();