Избегайте статических значений в ASP.NET Core Program.cs - PullRequest
2 голосов
/ 02 июня 2019

В моем методе CreateWebHostBuilder () я добавил хранилище параметров AWS Systems Manager в качестве дополнительного источника для Конфигуратора конфигурации:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args)
                  .ConfigureAppConfiguration(builder =>
                  {
                      builder.AddSystemsManager("/ConfigureStoreName/");
                  })
                  .UseStartup<Startup>();
    }
}

Вместо жесткого кодирования "/ ConfigureStoreName / "Я хотел бы сделать это значением конфигурации.

Когда я звоню .ConfigureAppConfiguration(), у меня есть доступ к значениям конфигурации из appsettings.json , которые .CreateDefaultBuilder() использует?Если так, как бы я обновил свой код для его вызова?Если нет, то как лучше всего избегать использования статического значения в методе CreateWebHostBuilder()?

Ответы [ 2 ]

2 голосов
/ 02 июня 2019

Предварительно загрузить файл настроек с этой информацией.

Если, например, файл настроек содержал

{
  //...

  "AWS": {
    "Profile": "local-test-profile",
    "Region": "us-west-2",
    "ConfigureSource": {
      "Path": "/ConfigureStoreName/"
    }
  }

  //...
}

загрузить это в конфигурацию, чтобы извлечь значение.

public static IWebHostBuilder CreateWebHostBuilder(string[] args) {

    var configuration = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json") //<-- or whichever file has that information
        .Build();

    string path = configuration.GetValue<string>("AWS:ConfigureSource:Path");
    //Or a strongly typed model with aws options

    return WebHost.CreateDefaultBuilder(args)
              .ConfigureAppConfiguration(builder =>
              {
                  builder.AddSystemsManager(path);
              })
              .UseStartup<Startup>();
}
1 голос
/ 03 июня 2019

Я решил использовать переменную среды:

public class Program
{
    private static string _parameterStoreNamePath;

    public static void Main(string[] args)
    {
        _parameterStoreNamePath = Environment.GetEnvironmentVariable("AWS_PARAMETER_STORE_NAME");
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args)
                  .ConfigureAppConfiguration(builder =>
                  {
                      builder.AddSystemsManager(_parameterStoreNamePath); 
                  })
                  .UseStartup<Startup>();
    }
}

Примечания:

  1. В проекте Visual Studio создайте переменную среды с именем AWS_PARAMETER_STORE_NAME.
  2. Для развернутых экземпляров необходимо установить AWS_PARAMETER_STORE_NAME в serverless.template или напрямую добавить в Lambda через консоль.
...