Порядок между AddMvc/AddSwaggerGen и UseMvc/UseSwagger(UI)

Когда я использую свои API с помощью Swagger, я следую одному из этих указаний и всегда ставлю инъекции MVC перед инъекциями Swagger, как это.

services.AddMvc();
services.AddSwaggerGen(_ => { ... });

app.UseMvc();
app.UseSwagger();
app.UseSwaggerUI(c => { ... });

Мой друг спросил, почему я применяю этот порядок, а не обрабатываю строки, связанные с Swagger, до MVC. Я обнаружил, что не могу ни объяснить ему, ни мотивировать это (кроме очень смущенного колодца... так оно и есть...). Это говорит мне, что я должен немного вникнуть в этот вопрос.

Короткий поиск в Google не выявил ничего значимого, насколько я заметил, поэтому я спрашиваю здесь.

1 ответ

Решение

В этом конкретном случае Add* не зависит от порядка их добавления в коллекцию сервисов.

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

Генерал AddScoped/AddSingleton/AddTransient Call распознает последний вызов для типа, поскольку он отменяет предыдущие регистрационные вызовы для этого типа. При регистрации нескольких реализаций для типа, для разрешения с помощью IEnumerable<T> тогда реализации в коллекции будут в том порядке, в котором они были зарегистрированы.

Внедрение зависимостей в ASP.NET Core

Для Use* middleware порядок их добавления в конвейер важен, так как они вызываются в том же порядке.

порядок

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

Ссылка на ASP.NET Core Middleware

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

Как правило, большинство промежуточного программного обеспечения для обеспечения безопасности (аутентификации / авторизации) и ведения журналов рекомендуется добавлять на ранних этапах разработки, поэтому они, как правило, появляются раньше. AddMvc,

Другие вопросы по тегам