Что такое конфигурация в программировании
Перейти к содержимому

Что такое конфигурация в программировании

  • автор:

Конфигурация программного обеспечения

Конфигурация программного обеспечения — совокупность настроек программы, задаваемая пользователем.

Существуют различные подходы к хранению конфигурации. Многие программы хранят настройки в текстовых файлах; особенно характерно это для UNIX-подобных систем. В Windows текстовые конфигурационные файлы так же используются и часто имеют формат .ini. Несмотря на то, что почти во всех случаях эти файлы можно редактировать вручную, во многих случаях для этого создаётся специальный интерфейс (который может быть как консольный, так и графический).

Иногда в UNIX-подобных системах конфигурация задаётся на этапе сборки программы, и для её изменения программу необходимо пересобирать. Ярким примером может служить ядро Linux. Почти во всех приложениях, собираемых на основе autoconf, можно подключать или отключать те или иные внешние библиотеки через параметры к скрипту configure .

Часто для хранения конфигурации используется специальная база данных. В Windows используется реестр Windows, а в GNOME — GConf; в обоих случаях конфигурация имеет древовидную структуру.

Источники

  • Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное.
  • Проставив сноски, внести более точные указания на источники.
  • Файлы конфигурации

Конфигурация приложения

Это отрывок из электронной книги для разработчиков ASP NET веб-формы для Azure, доступной в документации по .NET или в виде бесплатного pdf-файла, Blazor который можно читать в автономном режиме.

BlazorЭскиз обложки электронной книги -for-ASP-NET-Web-Forms-Developers.

Основной способ загрузки конфигурации приложения в веб-формы — с помощью записей в файлеweb.config — на сервере или в связанном файле конфигурации, на который ссылается web.config. Статический ConfigurationManager объект можно использовать для взаимодействия с параметрами приложения, строками подключения к репозиторию данных и другими расширенными поставщиками конфигурации, которые добавляются в приложение. Обычно для просмотра взаимодействия с конфигурацией приложения отображается следующий код:

var configurationValue = ConfigurationManager.AppSettings["ConfigurationSettingName"]; var connectionString = ConfigurationManager.ConnectionStrings["MyDatabaseConnectionName"].ConnectionString; 

При использовании ASP.NET Core и Blazor на стороне сервера файл web.config может присутствовать, если приложение размещено на сервере Windows IIS. Однако взаимодействия ConfigurationManager с этой конфигурацией не требуется, и вы можете получить более структурированную конфигурацию приложения из других источников. Давайте посмотрим, как собирается конфигурация и как можно получить доступ к сведениям о конфигурации из файла web.config.

Источники конфигураций

ASP.NET Core признает наличие множества источников конфигурации, которые вы можете использовать для приложения. Платформа пытается предложить наиболее подходящие из этих функций по умолчанию. Конфигурация считывается и объединяется из этих различных источников с помощью ASP.NET Core. Более поздние загруженные значения для одного и того же ключа конфигурации имеют приоритет над более ранними значениями.

ASP.NET Core была разработана для обеспечения работы в облаке и упрощения настройки приложений для их пользователей и разработчиков. ASP.NET Core работает с учетом среды и знает, работает ли она в среде Production или Development . Индикатор среды задается в системной переменной среды ASPNETCORE_ENVIRONMENT . Если значение не задано, приложение по умолчанию работает в среде Production .

Приложение может активировать и добавить конфигурацию из нескольких источников, в зависимости от имени среды. По умолчанию конфигурация загружается из следующих ресурсов в указанном порядке:

  1. файла appsettings.jsв, если он есть;
  2. файла appsettings..json, если он есть;
  3. файла секретов пользователя на диске, если он есть;
  4. Переменные среды
  5. аргументов командной строки;

Формат файла appsettings.jsк и доступ к нему

Файл appsettings.jsв может быть иерархическим со значениями, структурированными как в следующем JSON:

< "section0": < "key0": "value", "key1": "value" >, "section1": < "key0": "value", "key1": "value" >> 

При отображении с помощью вышеуказанного JSON система конфигурации преобразует дочерние значения в плоские структуры и ссылается на полные иерархические пути. Символ двоеточия ( : ) разделяет каждое свойство в иерархии. Например, ключ конфигурации section1:key0 обращается к значению key0 объектного литерала section1 .

Секреты пользователя.

  • Являются значениями конфигурации, хранящимися в JSON-файле на рабочей станции разработчика, за пределами папки разработки приложения.
  • Загружаются только при выполнении в среде Development .
  • Связаны с конкретным приложением.
  • Управляется с помощью команды user-secrets интерфейса командной строки .NET.

Настройте приложение для хранения секретов, выполнив команду user-secrets :

dotnet user-secrets init 

Предыдущая команда добавляет элемент UserSecretsId в файл проекта. Элемент содержит идентификатор GUID, который используется для связывания секретов с приложением. Затем можно определить секрет с помощью команды set . Пример:

dotnet user-secrets set "Parent:ApiKey" "12345" 

Предыдущая команда делает ключ конфигурации Parent:ApiKey доступным на рабочей станции разработчика со значением 12345 .

Дополнительные сведения о создании, хранении и управлении секретами пользователей см. в документе Безопасное хранения разрабатываемых секретов приложений в ASP.NET Core.

Переменные среды

Следующий набор значений, загружаемых в конфигурацию приложения, — это переменные среды системы. Все параметры переменных среды системы теперь доступны через API настройки. При чтении внутри приложения иерархические значения преобразуются в плоские структуры и разделяются символами двоеточия. Однако некоторые операционные системы не разрешают имена переменных среды с двоеточием. ASP.NET Core устраняет это ограничение, преобразуя значения с двойным подчеркиванием ( __ ) в двоеточия при обращении к ним. Значение Parent:ApiKey из раздела о секретах пользователя выше можно переопределить с помощью переменной среды Parent__ApiKey .

аргументов командной строки;

Кроме того, конфигурацию можно указать в виде аргументов командной строки при запуске приложения. Используйте двойное тире ( — ) или прямую косую черту ( / ), чтобы указать имя устанавливаемого значения конфигурации и значение, которое необходимо настроить. Синтаксис напоминает следующие команды:

dotnet run CommandLineKey1=value1 --CommandLineKey2=value2 /CommandLineKey3=value3 dotnet run --CommandLineKey1 value1 /CommandLineKey2 value2 dotnet run Parent:ApiKey=67890 

Возвращение web.config

Если вы развернули приложение в Windows на IIS, файл web.config по-прежнему настраивает IIS для управления приложением. По умолчанию службы IIS добавляют ссылку на модуль ASP.NET Core (ANCM). ANCM — это собственный модуль IIS, в котором размещается приложение вместо веб-сервера Kestrel. Этот раздел web.config напоминает следующую XML-разметку:

Конфигурация конкретного приложения может быть определена путем вложения элемента environmentVariables в элемент aspNetCore . Значения, определенные в этом разделе, представлены в приложении ASP.NET Core как переменные среды. Переменные среды загружаются соответствующим образом во время выполнения этого сегмента запуска приложения.

Чтение конфигурации в приложении

В ASP.NET Core предоставляет конфигурацию приложения с помощью интерфейса IConfiguration. Этот интерфейс конфигурации должны запрашивать компоненты Blazor, страницы Blazor и любые другие управляемые ASP.NET Core классы, которым требуется доступ к конфигурации. Платформа ASP.NET Core автоматически заполнит этот интерфейс разрешенной конфигурацией, настроенной ранее. На странице Blazor или в разметке Razor компонента можно внедрить объект IConfiguration с директивой @inject , расположенной в верхней части файла .razor, следующим образом:

@inject IConfiguration Configuration 

Приведенная выше инструкция делает объект IConfiguration доступным в качестве переменной Configuration для всего остального шаблона Razor.

Отдельные параметры конфигурации можно прочитать, указав иерархию параметров конфигурации, которую нужно использовать в качестве параметра индексатора:

var mySetting = Configuration["section1:key0"]; 

Вы можете извлечь все разделы конфигурации с помощью метода GetSection для извлечения коллекции ключей в определенном месте с синтаксисом, аналогичным GetSection(«section1») , чтобы получить конфигурацию для section1 из предыдущего примера.

Строго типизированная конфигурация

С помощью Web Forms можно было создать строго типизированный тип конфигурации, наследуемый от типа ConfigurationSection и связанных с ним типов. ConfigurationSection позволяет настроить некоторые бизнес-правила и обработку для этих значений конфигурации.

В ASP.NET Core можно указать иерархию классов, которая будет принимать значения конфигурации. Это классы:

  • Наследовать от родительского класса не нужно.
  • Должны быть включены свойства public , соответствующие свойствам и ссылкам на типы для структуры конфигурации, которую вы хотите зафиксировать.

Для предыдущего образца appsettings.js можно было определить следующие классы для записи значений:

public class MyConfig < public MyConfigSection section0 < get; set;>public MyConfigSection section1 < get; set;>> public class MyConfigSection < public string key0 < get; set; >public string key1 < get; set; >> 

Эту иерархию классов можно заполнить, добавив следующую строку в метод Startup.ConfigureServices (или соответствующее расположение в Program.cs, используя свойство builder.Services вместо services ):

services.Configure(Configuration); 

В оставшейся части приложения можно добавить входной параметр в классы или директиву @inject в шаблоны Razor типа IOptions для получения строго типизированных параметров конфигурации. Свойство IOptions.Value даст значение MyConfig , заполненное из параметров конфигурации.

@inject IOptions options @code

Дополнительные сведения о функции параметров можно найти в документе Шаблон параметров в ASP.NET Core.

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Конфигурация программного обеспечения

Конфигурация программного обеспечения — совокупность настроек программы, задаваемая пользователем.

Существуют различные подходы к хранению конфигурации. Многие программы хранят настройки в текстовых файлах; особенно характерно это для UNIX-подобных систем. В Windows текстовые конфигурационные файлы так же используются и часто имеют формат .ini. Несмотря на то, что почти во всех случаях эти файлы можно редактировать вручную, во многих случаях для этого создаётся специальный интерфейс (который может быть как консольный, так и графический).

Иногда в UNIX-подобных системах конфигурация задаётся на этапе сборки программы, и для её изменения программу необходимо пересобирать. Ярким примером может служить ядро Linux. Почти во всех приложениях, собираемых на основе autoconf, можно подключать или отключать те или иные внешние библиотеки через параметры к скрипту configure .

Часто для хранения конфигурации используется специальная база данных. В Windows используется реестр Windows, а в GNOME — GConf; в обоих случаях конфигурация имеет древовидную структуру.

Источники [ править ]

Это заготовка статьи о программировании. Вы можете помочь проекту, дополнив её.

Конфигурация¶

Как и обычный список настроек, конфигуратор инициализирует начальные значения (либо из файла «*.ini», либо через параметры класса). Отличительной особенностью конфигуратора является то, что по мере выполнения программы настройки могут меняться или добавляться.

В Pyramid существует 2 способа настройки приложений Императивный и Декларативный.

Императивный способ конфигурации¶

Императивный способ конфигурации означает что команды языка Python будут выполнены одна за другой, последовательно. Ниже пример простого приложения на Пирамиде сконфигурированного императивно.

Пример будет доступен по адресу http://localhost:8080/hello/

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
from wsgiref.simple_server import make_server from pyramid.config import Configurator from pyramid.response import Response def hello_world(request): return Response('Hello world!') if __name__ == '__main__': config = Configurator()  config.add_route('myHelloRoute', '/hello/')  config.add_view(hello_world, route_name='myHelloRoute')  # Создаем и запускаем WSGI приложение app = config.make_wsgi_app() server = make_server('0.0.0.0', 8080, app) server.serve_forever()

Декларативный способ конфигурации¶

Иногда бывает сложно выполнить все настройки императивно в одном месте, т.к. приложение обычно состоит из множества файлов. В таком случае, вам придется постоянно перескакивать между файлами, чтобы посмотреть настройки для блока кода из другого файла. Чтобы этого избежать, фреймворк Pyramid позволяет настраивать приложение декларативных способом ( configuration decoration ), т.е. добавлять настройки как можно ближе к целевому коду, как показано в примере ниже:

my-pyramid-app/views.py ¶

1 2 3 4 5 6
from pyramid.response import Response from pyramid.view import view_config @view_config(route_name='myHelloRoute') def hello_world(request): return Response('Hello')

Сам по себе декоратор pyramid.view.view_config не произведет ни какого эффекта. Чтобы приложение нашло и применило эти настройки нужно выполнить метод pyramid.config.Configurator.scan() ( scan ). После выполнения этот метод проходит по всем нижележащим файлам от текущей директории, ищет декларативное описание настроек и применяет их к проекту.

my-pyramid-app/__init__.py ¶

1 2 3 4 5 6 7 8 9 10 11 12 13
from wsgiref.simple_server import make_server from pyramid.config import Configurator if __name__ == '__main__': config = Configurator() config.add_route('myHelloRoute', '/hello/') config.scan()  # Создаем и запускаем WSGI приложение app = config.make_wsgi_app() server = make_server('0.0.0.0', 8080, app) server.serve_forever()

В примере выше декоратор view_config делает то же что метод pyramid.config.Configurator.add_view() но более наглядно:

config.add_view(hello_world, route_name='myHelloRoute')

Можно этот пример записать в одном файле:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
from wsgiref.simple_server import make_server from pyramid.config import Configurator from pyramid.response import Response from pyramid.view import view_config @view_config(route_name='myHelloRoute') def hello_world(request): return Response('Hello world!') if __name__ == '__main__': config = Configurator() config.add_route('myHelloRoute', '/hello/') config.scan()  # Создаем и запускаем WSGI приложение app = config.make_wsgi_app() server = make_server('0.0.0.0', 8080, app) server.serve_forever()

Резюме¶

Вы можете выбрать любой способ конфигурации, который вам понравится. Оба способа полностью эквивалентны и часто используются совместно, решая разные задачи конфигурации приложения более удобным способом.

Previous: Введение Next: Структура приложения

© Copyright 2020, Кафедра Интеллектуальных Информационных Технологий ИнФО УрФУ. Created using Sphinx 1.7.6.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *