Как стать автором
Обновить
22
0
Максим @fsou11

Full Stack Developer

Отправить сообщение
Понял, значит вместо создания собственного активатора достаточно было в первой Middleware переопределить скоуп, который находится в свойстве request.Properties.[HttpPropertyKeys.DependencyScope].

Проверил autofac,- всё действительно так, как вы говорите (сверху controller, снизу middleware):

image

Я посмотрел использование Autofac с Web API и OWIN'ом,- используется аналогичный моему решению принцип, в котором сконфигурированный контейнер (scope) привязывается к контексту Owin'a, а затем с помощью нового MessageHandler'a достаётся из контекста и перегружает стандартный scope Web API.

Однако, мне осталось не ясен момент, как же резолвятся сами контроллеры, т.к. стандартный ControllerActivator на полученном scope по прежнему вызывает BeginScope (default'ная реализация поведения создания контроллеров в web api).
В данном случае Web API просто встроили в OWIN'овский pipeline,- жизненный цикл запроса же в Web API оставили без изменений, что вполне корректно для случаев, когда Web API является единственным Middleware (или конфигурируется без IAppBuilder, а с помощью global.asax, как и есть в большинстве случаев).

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность