У меня есть приложение, которое будет использовать некоторые внешние микросервисы, которые я создал. Приложение и микросервисы размещены в Azure Службах приложений. Функциональность микросервисов необходима внутри класса Startup
, поэтому я регистрирую эти зависимости заранее (при создании IWebHostBuilder
). Микросервисы также зависят от значений конфигурации (предоставляемых приложением), поэтому я также выполняю некоторую конфигурацию IOptions
Pattern при создании IWebHostBuilder
для получения настроек из appsettings.json
. Этот файл настроек содержит настройки, которые будут использоваться во всех средах, а также некоторые из них, которые зависят от среды c. Я собирался использовать параметры из файла для локальной разработки и переопределить параметры c, определяемые средой, с помощью блейда конфигурации в службе приложений. В других приложениях, которые я создал, настройки блейд-конфигурации действительно переопределяют значения из appsettings.json
.
Однако, кажется, что при ранней настройке, как показано в приведенном ниже коде, служба приложений не работает переопределить настройки, и поэтому мои локальные настройки разработки в конечном итоге используются в службе приложений (и все взрывается). Я сделал снимок в темноте и переместил параметры c, определяемые средой, из appsettings.json
в их собственный файл JSON с другим именем. Сейчас я только загружаю этот файл рано. Это не помогло решить мою проблему.
Итак, мой вопрос: какие существуют методы для того, чтобы параметры конфигурации были доступны до Startup
, но при этом можно переопределить эти параметры в Azure Службах приложений? Я изучил документацию. NET Core по конфигурации, но есть так много вариантов и подходов, что они заставляют мою голову вращаться. Я сейчас использую. NET Core 2.2. Заранее спасибо!
internal static class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args)
.Build()
.Run();
}
private static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, builder) => { builder.AddEarlyRequiredConfiguration(); })
.ConfigureServices((context, services) => { services.AddEarlyRequiredServices(context); })
.UseStartup<Startup>();
}
private static void AddEarlyRequiredServices(this IServiceCollection services, WebHostBuilderContext context)
{
// This extension method is in a separate assembly, and registers the microservices.
// It also configures the IOptions stuff for the configuration values.
services.AddMyMicroservices(context);
}
private static void AddEarlyRequiredConfiguration(this IConfigurationBuilder builder)
{
builder.AddJsonFile("appsettings.json");
}
}