Как использовать заводскую активацию промежуточного ПО в ASP.NET Core

автор red


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

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

Чтобы использовать примеры кода, представленные в этой статье, в вашей системе должна быть установлена ​​Visual Studio 2022. Если у вас еще нет копии, вы можете скачать Visual Studio 2022 здесь.

Создайте проект веб-API ASP.NET Core 7 в Visual Studio 2022.

Прежде всего, давайте создадим проект ASP.NET Core 7 в Visual Studio 2022. Выполните следующие действия:

  1. Запустите интегрированную среду разработки Visual Studio 2022.
  2. Нажмите «Создать новый проект».
  3. В окне «Создать новый проект» выберите «ASP.NET Core Web API» из списка отображаемых шаблонов.
  4. Нажмите “Далее.
  5. В окне «Настроить новый проект» укажите имя и расположение нового проекта.
  6. При желании установите флажок «Поместить решение и проект в один каталог», в зависимости от ваших предпочтений.
  7. Нажмите “Далее.
  8. В следующем окне «Дополнительная информация» оставьте флажок «Использовать контроллеры (снимите флажок, чтобы использовать минимальное количество API)». В этом проекте мы не будем использовать минимальные API. Оставьте для параметра «Тип аутентификации» значение «Нет» (по умолчанию).
  9. Убедитесь, что флажки «Включить поддержку Open API», «Настроить для HTTPS» и «Включить Docker» не отмечены, так как мы не будем использовать эти функции здесь.
  10. Щелкните Создать.

Мы будем использовать этот проект веб-API ASP.NET Core 7 для работы с заводской активацией промежуточного ПО в следующих разделах.

Понимание промежуточного ПО в ASP.NET Core

ПО промежуточного слоя — это программные компоненты, составляющие конвейер обработки запросов и ответов в ASP.NET Core. Входящие запросы проходят через каждый компонент промежуточного слоя в конвейере, и каждый из этих компонентов может либо обработать запрос, либо направить его следующему компоненту в конвейере.

Программное обеспечение промежуточного слоя может выполнять множество функций, включая аутентификацию, авторизацию, ведение журналов, обработку исключений, маршрутизацию, кэширование и сжатие ответов. Вы можете разбить функциональность своего приложения на отдельные компоненты и добавить, удалить или изменить промежуточное ПО, чтобы адаптировать конвейер обработки запросов и ответов к вашему приложению.

Традиционно вам приходилось настраивать компоненты промежуточного программного обеспечения с помощью метода расширения UseMiddleware в классе Startup или файла Program.cs при использовании более новой версии ASP.NET Core. Напротив, активация ПО промежуточного слоя на основе фабрики позволяет определять и настраивать компоненты ПО промежуточного слоя с помощью фабрик, что обеспечивает большую гибкость при активации.

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

Программное обеспечение промежуточного слоя на основе соглашений в ASP.NET Core

Активация ПО промежуточного слоя на основе соглашений в ASP.NET Core — это функция, которая позволяет автоматически применять ПО промежуточного слоя к конвейеру запросов и ответов на основе предопределенных соглашений, а не явно настраивать каждый компонент ПО промежуточного слоя. В следующем листинге кода показано, как можно создать компонент промежуточного программного обеспечения на основе соглашений.

public class ConventionalMiddleware
    {
        private readonly RequestDelegate _next;
        public ConventionalMiddleware(RequestDelegate next)
            => _next = next;
        public async Task InvokeAsync(HttpContext context)
        {
            Trace.WriteLine("Inside the Conventional Middleware.");
            await _next(context);
        }
    }

Вы можете добавить это ПО промежуточного слоя в конвейер обработки запросов, используя следующий фрагмент кода в файле Program.cs.

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseMiddleware<ConventionalMiddleware>();
app.Run();

Заводское ПО промежуточного слоя в ASP.NET Core

Фабричная активация промежуточного ПО в ASP.NET Core обеспечивает более гибкий и динамичный способ настройки и активации компонентов промежуточного ПО. Активация ПО промежуточного слоя на заводе позволяет настроить процесс создания экземпляров ПО промежуточного слоя в соответствии с потребностями вашего приложения.

Программное обеспечение промежуточного слоя на основе фабрики позволяет вам внедрять зависимости с ограниченным временем жизни с помощью конструктора класса вашего промежуточного программного обеспечения — функция, не поддерживаемая промежуточным программным обеспечением, основанным на соглашениях. Время жизни с заданной областью означает, что служба создается один раз для каждого запроса клиента и удаляется в конце запроса.

Промежуточное ПО на основе фабрики имеет следующие преимущества по сравнению с промежуточным ПО в традиционном стиле или на основе соглашений:

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

Чтобы использовать заводскую активацию промежуточного программного обеспечения, необходимо выполнить четыре шага, описанных ниже.

  1. Создайте класс, представляющий компонент промежуточного программного обеспечения и реализующий интерфейс IMiddleware.
  2. Реализуйте метод InvokeAsync в своем промежуточном программном обеспечении, который определяет логику для промежуточного программного обеспечения.
  3. Добавьте ПО промежуточного слоя в контейнер внедрения зависимостей с помощью метода AddSingleton или AddScoped.
  4. Настройте конвейер ПО промежуточного слоя, используя метод расширения UseMiddleware и указав тип компонента ПО промежуточного слоя.

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

    public class FactoryActivatedMiddleware : IMiddleware
    {
        public async Task InvokeAsync(HttpContext context,
        RequestDelegate next)
        {
            Trace.WriteLine("Inside the Factory Activated Middleware.");
            await next.Invoke(context);
        }
    }

Вы должны зарегистрировать промежуточное ПО в контейнере сервисов, используя следующий фрагмент кода.

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddTransient<FactoryActivatedMiddleware>();

Теперь вы можете добавить это промежуточное ПО почти так же, как мы добавляли промежуточное ПО в примере с промежуточным ПО на основе соглашений.

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseMiddleware<FactoryActivatedMiddleware>();
app.Run();

Каждый вызов метода расширения UseMiddleware проверяет, соответствует ли рассматриваемая реализация промежуточного программного обеспечения интерфейсу IMiddleware. Если это условие выполнено, экземпляр IMiddlewareFactory, зарегистрированный в контейнере службы, используется для разрешения реализации интерфейса IMiddleware вместо реализации промежуточного программного обеспечения на основе соглашений. Это ПО промежуточного слоя регистрируется как временная или ограниченная служба в контейнере служб.

Интерфейс IMiddlewareFactory определяет два метода, а именно методы Create(Type) и Release(IMiddleware). В то время как метод Create(Type) используется для создания экземпляра ПО промежуточного слоя для каждого запроса, метод Release(IMiddleware) выпускает экземпляр IMiddleware в конце запроса. Реализация IMiddlewareFactory по умолчанию доступна в классе Microsoft.AspNetCore.Http.MiddlewareFactory.

Related Posts

Оставить комментарий