Luffy1
@Luffy1
Студент, Junior .NET programmer

Какое значение имеют аргументы метода Main() в создании объекта IHost?

У нас есть класса Program пустого web-приложение:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace ASP_NET_Core_Lessons
{
  public class Program
  {
    public static void Main(string[] args)
    {
      CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) => 
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
              webBuilder.UseStartup<Startup>();
            });
  }
}

Вот список вопросов:
1. Зачем нужны и что из себя представляют(я слышал, что консольные строки) параметры метода Main(), которые передаются в метод CreateHostBuilder(string[] args)?
2. Какая в эти параметры заложена логика изначально? Для конфигурации приложения?
3. Какую роль в данном случае играют параметры args метода Main(), которые мы передаём в метод CreateHostBuilder(string[] args)(а если точнее, то в Host.CreateDefaultBuilder(args))? За что они отвечают отвечают? Что будет, если их убрать, и как это повлияет на работу программы?
Не удивляйтесь, что я так много вопросов задаю - только начал учить ASP.NET Core.
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
Luffy1
@Luffy1 Автор вопроса
Студент, Junior .NET programmer
В Руководство по программированию на С# в MSDN:
Параметр метода Main - это массив String, который представляет аргументы командной строки

Итак, если у меня была программа (MyApp.exe), как это:
class Program
{
  static void Main(string[] args)
  {
    foreach (var arg in args)
    {
      Console.WriteLine(arg);
    }
  }
}

Что я начал в командной строке следующим образом:
MyApp.exe Arg1 Arg2 Arg3
В основном методе будет передан массив, содержащий три строки: "Arg1", "Arg2", "Arg3".
Если вам нужно передать аргумент, который содержит пробел, то оберните его в кавычки. Например:
MyApp.exe "Arg 1" "Arg 2" "Arg 3"
Аргументы командной строки обычно используются, когда вам нужно передавать информацию в ваше приложение во время выполнения. Например, если вы пишете программу, которая копирует файл из одного места в другое, вы, вероятно, передадите два местоположения в качестве аргументов командной строки. Например:
Copy.exe C:\file1.txt C:\file2.txt

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

А передавая эти параметры в метод CreateDefaultBuilder(string [] args), мы конфигурируем инициализатора приложения. Как сказано в Руководство по программированию на С# в MSDN:
К возвращаемому HostBuilderприменяются следующие значения по умолчанию:
Присвойте ContentRootPath результату GetCurrentDirectory()
Загрузка узла IConfiguration из предварительно исправленных переменных среды "DOTNET_"
Загрузить IConfiguration узла из представленных аргументов командной строки
Загрузить IConfiguration приложений из "appSettings. JSON" и "appSettings. [EnvironmentName]. JSON
загружать приложение IConfiguration из секретов пользователя, когда EnvironmentName — "Разработка" с помощью входной сборки
Загрузка IConfiguration приложений из переменных среды
Загрузить IConfiguration приложений из представленных аргументов командной строки
Настройка ILoggerFactory для ведения журнала в выходных данных консоли, отладки и источника события
включает проверку области в контейнере внедрения зависимостей, если EnvironmentName — "Development"


А IConfiguration -
Представляет набор свойств конфигурации приложения в вид пар "ключ — значение".


А если мы не передадим параметры, то они просто не будут учитываться при создании HostBuilder'а:
Перегрузка метода, в которой мы не передаём параметров:
Присвойте ContentRootPath результату GetCurrentDirectory()
Загрузка узла IConfiguration из предварительно исправленных переменных среды "DOTNET_"
Загрузить IConfiguration приложений из "appSettings. JSON" и "appSettings. [EnvironmentName]. JSON
загружать приложение IConfiguration из секретов пользователя, когда EnvironmentName — "Разработка" с помощью входной сборки
Загрузка IConfiguration приложений из переменных среды
Настройка ILoggerFactory для ведения журнала в выходных данных консоли, отладки и источника события
включает проверку области в контейнере внедрения зависимостей, если EnvironmentName — "Development"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы