Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
Провайдер CommandLineConfigurationProvider обеспечивает передачу аргументов командной строки в конфигурацию приложения. Для применения этого провайдера у объекта вызывается метод AddCommandLine(), в который передаются аргументы командной строки. Но поскольку приложение по умолчанию загружает аргументы командной строки в объект конфигурации, который передается в классы приложения через dependency injection, то нам нет смысла явным образом его вызывать.
Каждый аргумент командной строки, который мы хотим использовать в качестве параметра конфигурации, должен представлять пару ключ-значение. Есть разные способы определения таких параметров. Самый распространненый - после ключа после знака равно = указывается значение, а через пробел последующие параметры:
key1=value1 key2=value2 key3=value3
Также можно использовать другие способы:
key1=value1 --key2=value2 /key3=value3 --key1 value1 /key2 value2 key1= key2=value2
Перед ключом можно указать префикс -- или /, тогда между ключом и значением можно опустить знак равно = и оставить просто пробел.
Также если мы хотим указать ключ, но не хотим указывать значение, то поле знака равно можно не указывать значение.
Для тестирования передачи параметров командной строки перейдем к настройкам проекта на вкладку Debug:
В поле Application arguments укажем, например, два параметра:
name=Bob age=37
В данном случае два параметра name и age. После изменения сохраним настройки.
Определим в классе Startup какой-нибудь простейший код для получения значений конфигурации:
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; namespace ConfigurationApp { public class Startup { public Startup(IConfiguration config) { AppConfiguration = config; } public IConfiguration AppConfiguration { get; set; } public void Configure(IApplicationBuilder app) { app.Run(async (context) => { await context.Response.WriteAsync($"{AppConfiguration["name"]} - {AppConfiguration["age"]}"); }); } } }
После запуска мы увидим указанные значения параметров конфигурации:
Используя CLI, мы можем запустить приложение из командной строки и передать ему параметры.
Итак, удалим выше определенные параметры и выполним перестроение проекта. Откроем командную строку и перейдем в консоли с помощью команды cd в папку проекта. В моем случае это папка C:\Users\Eugene\Source\Repos\ASPNETCore\ConfigurationApp\ConfigurationApp.
Далее введем следующую команду:
dotnet run name=Tom age=35
В итоге приложение подхватит переданные данные:
Мы можем на уровне кода симулировать передачу параметров командной строки:
public class Startup { public Startup() { string[] args = { "name=Alice", "age=29"}; // псевдопараметры командной строки var builder = new ConfigurationBuilder().AddCommandLine(args); AppConfiguration = builder.Build(); } public IConfiguration AppConfiguration { get; set; } public void Configure(IApplicationBuilder app) { app.Run(async (context) => { await context.Response.WriteAsync($"{AppConfiguration["name"]} - {AppConfiguration["age"]}"); }); } }
Для загрузки переменных среды окружения в качестве параметров конфигурации применяется провайдер EnvironmentVariablesConfigurationProvider. Для его использования у объекта ConfigurationBuilder вызывается метод AddEnvironmentVariables(). Однако в реальности вряд ли его придется часто использовать, так как среда ASP.NET Core уже загружает переменные среды окружения в объект конфигурации по умолчанию.
Например, получим переменную окружения "JAVA_HOME", которая указывает на папку установки java sdk, если эта переменная определена:
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; namespace ConfigurationApp { public class Startup { public Startup(IConfiguration config) { AppConfiguration = config; } public IConfiguration AppConfiguration { get; set; } public void Configure(IApplicationBuilder app) { string java_dir = AppConfiguration["JAVA_HOME"] ?? "not set"; app.Run(async(context) => { await context.Response.WriteAsync(java_dir); }); } } }
Явное применение метода AddEnvironmentVariables()
:
AppConfiguration = new ConfigurationBuilder() .AddEnvironmentVariables() .Build();
Провайдер MemoryConfigurationProvider позволяет использовать в качестве конфигурации коллекцию IEnumerable<<string, string>>, которая хранит данные в виде пары ключ-значение (пример - объект Dictionary). Для добавления источника конфигурации применяется метод AddInMemoryCollection(), в который передается словарь конфигурационных настроек:
public class Startup { public Startup() { var builder = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary<string, string> { {"color", "blue"}, {"text", "Hello ASP.NET 5"} }); AppConfiguration = builder.Build(); } public IConfiguration AppConfiguration { get; set; } public void Configure(IApplicationBuilder app) { var color = AppConfiguration["color"]; var text = AppConfiguration["text"]; app.Run(async (context) => { await context.Response.WriteAsync($"<p style='color:{color};'>{text}</p>"); }); } }