Назначение класса Startup

  • Михаил
  • 8 мин. на прочтение
  • 101
  • 02 Jun 2024
  • 02 Jun 2024

Класс Startup в .NET Core является центральным элементом в конфигурации и настройке приложения. Он используется для определения сервисов, которые будут доступны в приложении, а также для настройки конвейера обработки HTTP-запросов. Startup является входной точкой в приложение ASP.NET Core. Этот класс производит конфигурацию приложения, настраивает сервисы, которые приложение будет использовать, устанавливает компоненты для обработки запроса или middleware.

Класс Startup должен определять метод Configure(), и также опционально в Startup можно определить конструктор класса и метод ConfigureServices(). При запуске приложения сначала срабатывает конструктор, затем метод ConfigureServices() и в конце метод Configure(). Эти методы вызываются средой выполнения ASP.NET.

Основные задачи, выполняемые в классе Startup:

1. Конфигурация сервисов:

  • В методе ConfigureServices вы регистрируете сервисы, которые будут использоваться в вашем приложении.
  • Это может включать в себя настройку подключений к базам данных, добавление middleware-компонентов, регистрацию контроллеров и других сервисов.

2. Настройка конвейера обработки HTTP-запросов:

  • В методе Configure вы настраиваете конвейер обработки HTTP-запросов.
  • Здесь вы определяете, какие middleware-компоненты будут использоваться для обработки входящих запросов.
  • Это может включать в себя настройку маршрутизации, обработку статических файлов, использование авторизации и аутентификации и т.д.

Вот пример реализации класса Startup:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        services.AddDbContext(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddIdentity()
            .AddEntityFrameworkStores();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

Метод ConfigureServices
Необязательный метод ConfigureServices() регистрирует сервисы, которые используются приложением. В качестве параметра он принимает объект IServiceCollection, который и представляет коллекцию сервисов в приложении. С помощью методов расширений этого объекта производится конфигурация приложения для использования сервисов. Все методы имеют форму Add[название_сервиса].

В этом примере, в методе ConfigureServices мы:

  • Добавляем поддержку контроллеров и представлений.
  • Настраиваем подключение к базе данных.
  • Настраиваем систему аутентификации с использованием Identity.

Метод Configure
Метод Configure устанавливает, как приложение будет обрабатывать запрос. Этот метод является обязательным. Для установки компонентов, которые обрабатывают запрос, используются методы объекта IApplicationBuilder. Объект IApplicationBuilder является обязательным параметром для метода Configure. Кроме того, метод нередко принимает еще один необязательный параметр - объект IWebHostEnvironment, который позволяет получить информацию о среде, в которой запускается приложение, и взаимодействовать с ней. Но в принципе в метод Configure в качестве параметра может передаваться любой сервис, который зарегистрирован в методе ConfigureServices или который регистрируется для приложения по умолчанию (например, IWebHostEnvironment).

В методе Configure мы:

  • Настраиваем обработку исключений в зависимости от среды (development или production).
  • Включаем поддержку HTTPS.
  • Настраиваем обработку статических файлов.
  • Настраиваем маршрутизацию с использованием контроллеров.
  • Включаем авторизацию.

Конструктор Startup
Конструктор является необязательной частью класса Startup. В конструкторе, как правило, производится начальная конфигурация приложения.

Если мы создаем проект ASP.NET Core по типу Empty, то класс Startup в таком проекте по умолчанию не содержит конструктор. Но при необходимости мы можем его определить.

Можно создать конструктор без параметров, а можно в качестве параметров передать сервисы IWebHostEnvironment (передает информацию о среде, в которой запускается приложение) и IConfiguration (передает конфигурацию приложения), которые доступны для приложения по умолчанию. К примеру, можно получить доступный для приложения по умолчанию сервис IWebHostEnvironment, сохранить его в переменную и использовать при обработке запроса:

public class Startup
{
   IWebHostEnvironment environment;
   public Startup(IWebHostEnvironment environment)
   {
 		this.environment = environment;
   }
   public void ConfigureServices(IServiceCollection services)
   {
   }
   public void Configure(IApplicationBuilder app)
   {
       app.UseRouting();
       app.UseEndpoints(endpoints =>
       {
       endpoints.MapGet("/", async context =>
           {
               await context.Response.WriteAsync($"Application Name: {environment.ApplicationName}");
           });
       });
   }
}

В данном случае в браузере будет выводиться название приложения, которое хранится в свойстве environment.ApplicationName

Класс Startup является важным компонентом в .NET Core, который обеспечивает централизованную и согласованную настройку приложения. Он позволяет легко расширять и настраивать функциональность приложения, подключая необходимые сервисы и middleware-компоненты.