Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 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