在构建 Web 应用程序之前从 Azure AppConfiguration 获取 AppSettings

问题描述 投票:0回答:1

我的最小 Web api 使用 Azure 应用程序配置来存储多个配置设置。

现在我需要从该配置中获取一些值 before .Build() Web 应用程序,除了使用 BuildServiceProvider 之外,我找不到其他方法来获取我的设置。


    var builder = WebApplication.CreateBuilder(args);

    const string JSON = "json";
    var appSettingsKey = CONSTANTS.APP.SETTINGS.APPSETTINGS.ToLower();
    
    builder.Configuration.AddJsonFile($"{appSettingsKey}.{JSON}", optional: true, reloadOnChange: true);
    builder.Configuration.AddJsonFile($"{appSettingsKey}.{builder.Environment.EnvironmentName}.{JSON}", optional: true, reloadOnChange: true);
    builder.Configuration.AddEnvironmentVariables();
    
    builder.Services.Configure<Settings>(builder.Configuration.GetSection(CONSTANTS.APP.SETTINGS.EQUINOX_SETTINGS_PREFIX));
    builder.Configuration.AddAzureAppConfiguration(options => options.Connect(builder.Configuration.GetConnectionString(CONSTANTS.APP.SETTINGS.APP_CONFIGURATION_CONNECTION_STRING))
                            .Select(CONSTANTS.APP.SETTINGS.EQUINOX_SETTINGS_KEY_FILTER, CONSTANTS.APP.SETTINGS.EQUINOX_SETTINGS_LABEL_FILTER)
                            .ConfigureRefresh(refresh => refresh.Register($"{CONSTANTS.APP.SETTINGS.EQUINOX_SETTINGS_PREFIX}:{CONSTANTS.APP.SETTINGS.SENTINEL_KEY}", refreshAll: true))
                            .UseFeatureFlags());

    var buildServiceProvider = builder.Services.BuildServiceProvider();
    var settings = (buildServiceProvider.GetRequiredService<IOptions<Settings>>() ?? null) ?? throw new InvalidOperationException();
    
    builder.Host.UseSerilog((hostBuilderContext, services, configuration) =>
    {
        configuration.ConfigureLogging(CONSTANTS.CLUSTER.EQUINOX.ToUpper());
        configuration.AddApplicationInsightsLogging(services, hostBuilderContext.Configuration, settings.Value);
    });
    
    builder.UseOrleans(settings);
    builder.AddServices(settings);
    
    var app = builder.Build();

现在我知道从应用程序代码结果中调用“BuildServiceProvider” 在单例服务的附加副本中,但由于我需要注册一些需要这些设置的服务,例如 Serilog 的 ApplicationInsights,我不知道该怎么做。

正确的做法是什么?

c# asp.net-core minimal-apis
1个回答
0
投票

您可以使用

ConfigurationBinder.Get
扩展方法,无需构建服务提供者。沿着这些思路:

var section = builder.Configuration.GetSection(CONSTANTS.APP.SETTINGS.EQUINOX_SETTINGS_PREFIX);

var settings = section.Get<Settings>();

// use settings
© www.soinside.com 2019 - 2024. All rights reserved.