Здраствуйте, мне нужно на основании информации в httpContext произвести поиск в базе данных и после этого добавить в коллекцию Items некоторую информацию.
Я добавляю middleware в конвейер с помощью app.UseMiddleware<Тип>() , но в конструкторе Middleware, я не могу запросить другие сервисы - выскакивает ошибка.
Так вот, возможно ли в конструкторе Middleware получить другой сервис?
В конструктор не пробросить зависимости, ибо middleware создаются при старте, грубо говоря до старта DI, зависимости пробрасывать надо в InvokeAsync метод
Middleware is constructed at app startup and therefore has application life time. Scoped lifetime services used by middleware constructors aren't shared with other dependency-injected types during each request. To share a scoped service between middleware and other types, add these services to the InvokeAsync method's signature. The InvokeAsync method can accept additional parameters that are populated by DI:
Василий Банников, я грубо написал, что DI позже стартует. Но DbContext не потокобезопасный, и AddDbContext добавляет в контейнер как Scoped, в общем, можно конечно, но не нужно. Да ms так рекомендует. А в остальном, проще синглтоном тогда в контейнер добавить.
Василий Банников, контроллер тут ни причем, как раз он то точно в одном потоке будет, а вот два одновременных запроса не факт, что будут в одном потоке.