Как зарегистрироваться и получить IUserIdentity из контейнера в NancyFx?
Я использую FluentValidation с NancyFx. Я хочу проверить некоторые данные в соответствии с текущим контекстом, точно в отношении текущего пользователя. К сожалению, я не могу найти ни одного примера, как зарегистрироваться и получить из контейнера (я использую StructureMap) такую информацию.
Документы "Контекст должен быть доступен в большинстве мест Нанси, поэтому никогда не должно быть проблем с установлением личности пользователя, который вызывает текущий запрос". но контейнер не имеет его по умолчанию.
Любые ссылки, направления?
Буду благодарен за вашу помощь.
2 ответа
Контекст является областью запроса, как и идентификатор пользователя, и передается в метод RequestStartup, который вы можете переопределить в своем загрузчике. Контейнер также передается в RequestStartup, так что вы можете зарегистрировать все, что вам нужно для каждого запроса, и использовать контекст при создании объектов, которые вы регистрируете.
Нечто подобное:
Зарегистрируйте ICurrentContextProvider для каждого запроса. ICurrentContextProvider может иметь только одно свойство IUserIdentity, хотя я бы порекомендовал сделать его с двумя явными методами для установки и получения, чтобы вы могли предотвратить двойную инициализацию и т. Д.
Сделайте так, чтобы ваш IUserMapper (предполагая, что его запрос также ограничен) зависел от ICurrentContextProvider, и после сопоставления установите свойство.
После этого любой код, который зависит от ICurrentContextProvider, будет иметь доступ к заданному вами свойству.