День 1275. #ЗаметкиНаПолях
Настройка Через Параметры Командной Строки в Консольных Приложениях
Внедрение зависимостей значительно упрощает управление ресурсами в приложениях .NET, по крайней мере, если вы разберётесь с настройкой хоста.
Для приложений .NET мы обычно используем файл JSON с настройками, но можно сделать приложение более гибким, с помощью параметров командной строки. Вариантом использования может быть временное решение, которое требуется запускать как запланированное задание.
В примере ниже консольное приложение .NET вызывается в терминале, а параметры являются позиционными и все обязательные. Приложение вызывается так:
dotnet MyApp.dll first second third fourth fifth
Теперь проведём настройку хоста в файле program.cs, сначала создавая построитель по умолчанию с аргументами командной строки, а затем настраиваем конфигурацию приложения как коллекцию в памяти, основанную на парах ключ-значение из словаря:
using IHost host = Host
.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((_, conf) =>
conf.AddInMemoryCollection(
new Dictionary<string, string> {
["First"] = args[0],
["Second"] = args[1],
["Third"] = args[2],
["Fourth"] = args[3],
["Fifth"] = args[4]
}))
.ConfigureServices((_, srvc) =>
srvc.AddScoped<TestClass>())
.Build();
Теперь мы можем передать эту конфигурацию как параметр в любой конструктор:
using System.Text;
using Microsoft.Extensions.Configuration;
namespace MyApp;
public class TestClass
{
private readonly string First;
private readonly string Second;
private readonly string Third;
private readonly string Fourth;
private readonly string Fifth;
public TestClass(IConfiguration conf)
{
First = conf["First"];
Second = conf["Second"];
Third = conf["Third"];
Fourth = conf["Fourth"];
Fifth = conf["Fifth"];
}
public void Run()
{
//…
}
}
И далее вызвать класс как сервис:
var test = host.Services.GetService<TestClass>();
test.Run();
Этот пример не проверяет список параметров и не предлагает какой-либо гибкости. Здесь мы просто превращаем параметры командной строки в удобную конфигурацию, передаваемую через внедрение зависимостей.
Важно отметить, что в нашей конфигурации хоста мы сопоставляем параметры с элементами словаря, а в классе извлекаем настроенные значения, как и в любом другом случае использования интерфейса IConfiguration.
Полный код примера здесь
Источник: https://dev.to/alfetta159/configuration-using-command-line-parameters-in-net-console-applications-21e4