Запуск приложения

Steve Smith

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

Класс Startup

В ASP.NET Core класс Startup является точкой входа приложения, и он необходим для всех приложений. В приложении могут находиться базовые классы и методы, зависящие от среды, (see Работа с несколькими средами), но независимо от этого класс Startup служит точкой входа приложения. ASP.NET всегда ищет в базовой сборке класс с именем Startup (в любом пространстве имен). Вы можете указать другую сборку при помощи ключа Hosting:Application. Не важно, определен ли класс как public - ASP.NET все равно его загрузит. Если существует несколько классов Startup, это не вызовет исключения. ASP.NET сделает выбор, основываясь на пространстве имен (сперва идет соответствие с корневым пространством имен проекта, иначе будет выбран класс в алфавитном порядке пространства имен).

Класс Startup может принимать в свои конструкторы зависимости, которые предоставляются внедрением зависимостей. Обычно способ, которым настраивается приложение, определяется внутри конструктора класса Startup (см. Конфигурация). В классе Startup должен быть определен метод Configure``и опционально метод ``ConfigureServices, которые вызываются при запуске приложения.

Метод Configure

Метод Configure используется для указания того, как ASP.NET приложение будет реагировать на отдельные HTTP запросы. Вы можете сделать так, чтобы каждый запрос получал тот же ответ. Однако многие приложения требуют большего функционала. Более сложные части настроек могут быть инкапсулированы в middleware и добавлены с помощью метода расширения в IApplicationBuilder.

Метод Configure должен принимать параметр IApplicationBuilder. Можно также указать и дополнительные сервисы, как IHostingEnvironment и ILoggerFactory, и тогда эти серверы будут внедрены сервером, если они доступны. В следующем примере несколько методов расширения используются для настройки потока с помощью BrowserLink, страниц с ошибками, статических файлов, ASP.NET MVC и Identity.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }
    });
}

Каждый метод расширения Use добавляет middleware в поток запросов. Например, UseMvc добавляет в поток запросов связующее ПО routing и настраивает MVC в качестве обработчика по умолчанию.

О связующем ПО и IApplicationBuilder вы можете узнать в теме Связующее ПО (Middleware).

Метод ConfigureServices

Дополнительно в класс Startup может быть включен метод ConfigureServices для настройки сервисов, которые использует приложение. Метод ConfigureServices является открытым методом; в качестве параметра он принимает экземпляр IServiceCollection и может возвращать IServiceProvider. Метод ConfigureServices вызывается перед методом Configure. Это очень важно, поскольку, например, ASP.NET MVC требует того, чтобы конкретные сервисы были добавлены в ConfigureServices, прежде чем они начнут работать в потоке запросов.

Как и с Configure, функции, которые требуют реальной установки в ConfigureServices, должны быть вложены в методы расширения для IServiceCollection. В примере вы видите, что некоторые методы расширения Add[Something] используются для того, чтобы приложение работало с сервисами из Entity Framework, Identity и MVC:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddMvc();

    // Add application services.
    services.AddTransient<IEmailSender, AuthMessageSender>();
    services.AddTransient<ISmsSender, AuthMessageSender>();
}

Добавление сервисов в контейнер делает их доступными внутри приложения через внедрение зависимостей. Класс Startup может определять зависимости, которые требуют его методы, в качестве параметров, а не жестко закодированных конкретных реализаций, и то же самое происходит со связующим ПО, MVC контроллерами и другими классами в приложении.

В метод ConfigureServices вы также должны добавить классы настроек, которые будут присутствовать в вашем приложении. См. Конфигурация, если хотите получить больше информации по конфигурационным опциям.

Сервисы, доступные при запуске приложения

Во время запуска приложения ASP.NET Core предоставляет конкретные сервисы и объекты. Вы можете запрашивать конкретный набор этих сервисов, просто включив соответствующий интерфейс в качестве параметра в конструктор класса Startup или в один из его методов - Configure или ConfigureServices. Сервисы, доступные для каждого метода класса Startup, описаны ниже. Сервисы и объекты включают в себя следующее:

IApplicationBuilder
Используется для создания потока запросов. Доступен только для метода Configure в Startup. См. Элементы Features.
IHostingEnvironment
Предоставляет текущие EnvironmentName, WebRootPath и провайдер корневой директории. Доступен конструктору Startup и методу Configure.
ILoggerFactory
Предоставляет механизм для логгирования. Доступен конструктору Startup и методу Configure. См. Логирование.
IServiceCollection
Используется для настройки набора сервисов, доступных приложению. Работает только с методом ConfigureServices.

Следующие сервисы могут быть запрошены в качестве параметров:

Конструктор запуска приложения - IHostingEnvironment - ILoggerFactory

ConfigureServices - IServiceCollection

Configure - IApplicationBuilder - IHostingEnvironment - ILoggerFactory

Примечание

Хотя ILoggerFactory доступен в конструкторе, обычно он настраивается в методе Configure. См. Логирование.

Поделись хорошей новостью с друзьями!
Следи за новостями!