2015-01-15 3 views
0

Im, используя веб-интерфейс API 2Asp Web Api Lifecycle вопрос

У меня есть фильтр аутентификации (реализации IAuthenticationFilter), который проверяет маркер и устанавливает ClaimsPrinciple на обоих тему и HttpContext. Одним из таких требований является userId

Я использую Windsor для инъекций зависимостей, используя описанный здесь метод. http://blog.ploeh.dk/2012/10/03/DependencyInjectioninASP.NETWebAPIwithCastleWindsor/

Это создаст граф объектов для моих контроллеров и поэтому новых до любых зависимостей, что контроллеры имеют

Проблема заключается в том, что один из конструкторов в одной из зависимостей делают вызов, который требует идентификатора пользователя

И кажется, что это (вызов конструктора) происходит до того, как он был установлен фильтром аутентификации

Какие у меня варианты?

ответ

1

Когда веб-API требуется контроллер, для его создания используется инъекция зависимости. Это всегда происходит до выполнения конвейера. Таким образом, вы не можете получить доступ к userid, который будет установлен позже.

Есть, по крайней мере, эти решения.

  • разрешить зависимость при необходимости (т. Е. Использовать контейнер DI как служебный локатор). мне не нравится это один
  • ленивых инициализировать зависимость (я не знаю, если замок Виндзор может это сделать, но это выглядит, как это возможно: Lazy Loading using Windsor Castle) Не так уж плохо
  • Смените implementacion из этот компонент и получить параметр userid в качестве параметра, где это необходимо, чтобы он был доступен, когда вы хотите его использовать. Я предпочитаю этот
Смежные вопросы