Порядок между 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
,