配置服务时访问配置对象

Posted

技术标签:

【中文标题】配置服务时访问配置对象【英文标题】:Access configuration object while configuring services 【发布时间】:2021-11-18 15:33:03 【问题描述】:

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

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"));

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于配置服务时访问配置对象的主要内容,如果未能解决你的问题,请参考以下文章

数据访问池+服务插件配置+数据库配置

小程序调用后端接口服务 配置文件详解

ASA防火墙利用Object对象/Object-group对象组简化访问策略配置

深入理解SpringCloud之配置刷新

09-微服务版的单点登陆系统设计及实现

k8s资源对象-ingress通俗理解及配置使用