【问题标题】: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"));

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

【问题讨论】:

    标签: c# dependency-injection console-application .net-5 .net-6.0


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 2010-10-19
      • 1970-01-01
      • 2019-10-22
      • 2019-10-23
      相关资源
      最近更新 更多