Что ж, давайте разберемся, как использовать мульти конфигурацию в консольном приложении. Для начала создадим файлы конфигураций для наших окружений Dev и Testing:
В консольных приложениях нет вложенности по дефолту. Поэтому открываем файл проекта .csproj и добавляем:
<ItemGroup>
<Content Include="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="appsettings.Dev.json;appsettings.Testing.json;">
<DependentUpon>appsettings.json</DependentUpon>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
В файле appsettings.json появились вложенные файлы с названием среды разработки:
В файлы appsettings.Dev.json и appsettings.Testing.json добавляем те части конфига, которые меняются в зависимости от среды. Изменим название топиков Kafka в контуре нагрузочного тестирования, для этого добавим нужные параметры в appsettings.Testing.json:
{
"Kafka":
{
"EventMainTopicTitle": "Test_EventMain",
"EventDelayTopicTitle": "Test_EventDelay",
"EventRejectTopicTitle": "Test_EventReject"
}
}
Осталось только выбрать нужный файл appsettings.json во время старта сервиса. Для этого внесем изменения в класс Program:
/// Конфигурация сервиса
private static IServiceProvider ConfigureServices()
{
// Установка имени переменной среды
const string environmentVariableName = "ASPNETCORE_ENVIRONMENT";
// Получение значения переменной среды
var environmentName =
Environment.GetEnvironmentVariable(environmentVariableName);
var services = new ServiceCollection();
_configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName)
.AddJsonFile("appsettings.json")
// Добавление json-файла для среды environmentName
.AddJsonFile($"appsettings.{environmentName}.json")
.AddEnvironmentVariables()
.Build();
services.AddSingleton(_configuration);
services.AddSingleton<KafkaHandler>();
return services.BuildServiceProvider();
}
Теперь всё готово к запуску сервиса в docker-контейнере.
Осталось указать переменные окружения для контейнера. Есть несколько способов сделать это:
Я остановилась на указании переменных в командной строке. Вот пример скрипта для создания образа и запуска контейнера:
# Build image
# docker build . -t consoleapp
# Run container on Dev
# docker run -d <i>--env ASPNETCORE_ENVIRONMENT=Dev</i> --name app consoleapp
Есть более элегантные решения для создания pipeline вашего развертывания, но зато этот способ можно реализовать за короткое время, что на начальной стадии создания проектов бывает очень критично.
Ссылка на GitHub с проектом.
Спасибо за внимание и приятного кодинга!
Apple возобновила переговоры с OpenAI о возможности внедрения ИИ-технологий в iOS 18, на основе данной операционной системы будут работать новые…
Конкурсный управляющий российской «дочки» Google подготовил 23 иска к участникам рекламного рынка. Общая сумма исков составляет 16 млрд рублей –…
Google завершил обновление основного алгоритма March 2024 Core Update. Раскатка обновлений была завершена 19 апреля, но сообщил об этом поисковик…
У частных продавцов на Авито появилась возможность составлять текст объявлений с помощью нейросети. Новый функционал доступен в категории «Обувь, одежда,…
24 апреля 2024 года в Москве состоялась церемония вручения наград международного конкурса Workspace Digital Awards. В этом году участниками стали…
27 июня Яндекс проведет гик-фестиваль Young Con для студентов и молодых специалистов, которые интересуются технологиями и хотят работать в IT.…