Возможности для WebApiRequestLifestyle
создается в тот момент, когда Web API вызывает IDependencyResolver.BeginScope()
и заканчивается, когда он вызывает Dispose()
на возвращенном IDependencyScope
экземпляра.
В прошлом я заметил несколько действительно странных причуд в дизайне веб-интерфейсов, которые связаны с охватом и асинхронностью. Например, Web API вызывает IDependencyScope.Dispose()
после того, как поток async уже завершен. Это означает, что во время вызова IDependencyScope.Dispose()
любые данные, хранящиеся в начале запроса с использованием CallContext.SetLogicalData
, больше не могут быть получены в этот момент времени. Таким образом, существует разрыв между окончанием запроса и удалением сферы действия. Простой инжектор зависит от наличия CallContext
во время запроса на удаление экземпляров с областью.
Что может случиться, так это то, что веб-API вызывает ваш OnActionExecuted
во время этого разрыва. Лишь немногие разработчики когда-либо замечают эту причуду, так как обычно во время разрыва все зависимости уже разрешены. Однако, если вы разрешаете услуги на этом этапе, все происходит неправильно в веб-API.