Ответ 1
Итак, я понял это. Ninject предоставляет доступ к HttpContext
напрямую, поэтому я сделал это:
kernel.Bind<IAuthenticationManager>().ToMethod(
c =>
HttpContext.Current.GetOwinContext().Authentication).InRequestScope();
Любое любознательное, вот оно.
Обновление для @Meep
Итак, Ninject не должен жить в том же проекте, что и MVC. Для этого я вытащил его в отдельный проект, в моем случае называемый "X.Dependencies". Он ссылается на все другие проекты, пакеты NuGet и т.д., Которые мне нужно для установки привязок. Он содержит два файла, исходный файл С# Ninject создает при добавлении, который я переименовал в NinjectConfiguration
, и обманный файл с именем AssemblyReferences
, который требуется для того, чтобы Visual Studio фактически импортировала все сборки в основной проект. Вот код для него:
/// <summary>
/// Cheaty way to force Visual Studio to find all assembly references, even the ones not directly used by the main project.
/// </summary>
internal static class AssemblyReferences {
internal static readonly Type t1 = typeof(Ninject.Web.Mvc.MvcModule);
}
Теперь, я полагаю, этого можно избежать, но это сработало для меня до сих пор. Хотя я открыт для предложений. Я просто добавляю ссылку на него из моего проекта MVC и позволяю WebActivator позаботиться о его инициализации, так же, как он использовал обычный способ.
Я также вытащил Owin в свой собственный проект под названием "X.Owin", и он содержит обычный класс запуска Owin, который я просто переименовал в OwinConfiguration
.
Оба они являются частью моего "уровня домена", который также содержит несколько других вспомогательных проектов. Еще один заслуживающий внимания проект из списка будет моим "X.Mappings", который предназначен для настройки сопоставлений AutoMapper. Он также использует WebActivator для самостоятельной инициализации, поэтому я просто добавляю ссылку на него в проекте MVC.
Поскольку я вытащил много кода из проекта MVC, все, что он делает в этот момент, это в основном маршрутизация и просмотр рендеринга. Все остальное передается на вспомогательные проекты по мере необходимости.