Порядок между AddMvc / AddSwaggerGen и UseMvc / UseSwagger (UI) - PullRequest
0 голосов
/ 25 декабря 2018

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

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

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

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

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

1 Ответ

0 голосов
/ 25 декабря 2018

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

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

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

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

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

Порядок

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

Ссылка Промежуточное ПО ASP.NET Core

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

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

...