При попытке использовать Ninject с новым проектом Web API 2, использующим ASP.NET Identity, я столкнулся с некоторым странным поведением. Я не могу передать обратные вызовы в CreatePerOwinContext() для запуска запросов к контроллерам веб-API. Для контроллеров MVC они работают нормально.
Шаги для воссоздания:
- Файл -> Новое веб-приложение ASP.NET VS 2013
- Проверьте MVC и WebAPI
- В разделе «Аутентификация» выберите «Индивидуальный».
- Добавьте пакеты nuget для Ninject, Ninject.Web.Common.OwinHost, Ninject.Web.WebApi.OwinHost и зависимых пакетов.
- Следуйте руководству по настройке ninject. для вашего приложения с поддержкой Owin
- Поместите точку останова в свой ApplicationUserManager.Create(), а затем отладьте F5
- Обратите внимание, что запрос к вашему домашнему контроллеру работает нормально — точка останова сработала. Сделайте запрос скрипача к контроллеру API - скажем, api/Account/Register, и обратный вызов просто никогда не вызывается
Я не поклонник ninject, поэтому я не уверен, что я делаю неправильно или это ошибка в расширениях Ninject OWIN. Я склоняюсь к тому, чтобы оставить OwinContext позади и просто использовать область видимости Ninject perHttpRequest, но я не уверен, что система идентификации ASP.NET сломается. Я слышал, что могут быть внутренние вызовы OwinContext.Get(), которые сломаются, если я не буду хранить вещи в контексте OWIN.
Очень ценю чьи-либо мысли.