Нефайловые провайдеры конфигурации

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 14.11.2019

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

Провайдер CommandLineConfigurationProvider обеспечивает передачу аргументов командной строки в конфигурацию приложения. Для применения этого провайдера у объекта вызывается метод AddCommandLine(), в который передаются аргументы командной строки. Но поскольку приложение по умолчанию загружает аргументы командной строки в объект конфигурации, который передается в классы приложения через dependency injection, то нам нет смысла явным образом его вызывать.

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

key1=value1 key2=value2 key3=value3

Также можно использовать другие способы:

key1=value1 --key2=value2 /key3=value3
--key1 value1 /key2 value2
key1= key2=value2

Перед ключом можно указать префикс -- или /, тогда между ключом и значением можно опустить знак равно = и оставить просто пробел.

Также если мы хотим указать ключ, но не хотим указывать значение, то поле знака равно можно не указывать значение.

Тестирование в Visual Studio

Для тестирования передачи параметров командной строки перейдем к настройкам проекта на вкладку Debug:

Параметры конфигурации командной строки в ASP.NET Core

В поле 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"]}");
            });
        }
    }
}

После запуска мы увидим указанные значения параметров конфигурации:

Установка конфигурации командной строки в ASP.NET Core

Запуск через консоль

Используя CLI, мы можем запустить приложение из командной строки и передать ему параметры.

Итак, удалим выше определенные параметры и выполним перестроение проекта. Откроем командную строку и перейдем в консоли с помощью команды cd в папку проекта. В моем случае это папка C:\Users\Eugene\Source\Repos\ASPNETCore\ConfigurationApp\ConfigurationApp.

Далее введем следующую команду:

dotnet run name=Tom age=35
dotnet run и конфигурация командной строки в ASP.NET Core

В итоге приложение подхватит переданные данные:

CommandLineConfigurationProvider в ASP.NET Core

Применение метода AddCommandLine

Мы можем на уровне кода симулировать передачу параметров командной строки:

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>");
        });
    }
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850