Зарегистрируйте IAuthenticationManager с помощью простого инжектора
У меня есть настройка конфигурации для Simple Injector, где я перенес все свои регистрации в конвейер OWIN.
Теперь проблема у меня есть контроллерAccountController
который на самом деле принимает параметры как
public AccountController(
AngularAppUserManager userManager,
AngularAppSignInManager signinManager,
IAuthenticationManager authenticationManager)
{
this._userManager = userManager;
this._signInManager = signinManager;
this._authenticationManager = authenticationManager;
}
Теперь мои конфигурации Оуэна Трубопровода выглядят примерно так
public void Configure(IAppBuilder app)
{
_container = new Container();
ConfigureOwinSecurity(app);
ConfigureWebApi(app);
ConfigureSimpleinjector(_container);
app.Use(async (context, next) =>
{
_container.Register<IOwinContext>(() => context);
await next();
});
_container.Register<IAuthenticationManager>(
() => _container.GetInstance<IOwinContext>().Authentication);
_container.Register<SignInManager<Users, Guid>, AngularAppSignInManager>();
}
private static void ConfigureOwinSecurity(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
CookieName = "AppNgCookie",
//LoginPath = new PathString("/Account/Login")
});
}
private static void ConfigureWebApi(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);
}
private static void ConfigureSimpleinjector(Container container)
{
SimpleInjectorInitializer.Initialize(container);
}
И Simple Injector Initializer выглядит примерно так
private static void InitializeContainer(Container container)
{
container.Register<DbContext, AngularAppContext>();
container.Register<IUserStore<Users, Guid>, AngularAppUserStore>();
container.Register<IRoleStore<Roles, Guid>, AngularAppRoleStore>();
container.Register<UserManager<Users, Guid>, AngularAppUserManager>();
container.Register<RoleManager<Roles, Guid>, AngularAppRoleManager>();
//container.RegisterPerWebRequest<SignInManager<Users, Guid>, AngularAppSignInManager>();
container.Register<IdentityFactoryOptions<AngularAppUserManager>, IdentityFactoryOptions<AngularAppUserManager>>();
//container.Register<IAuthenticationManager>(() => HttpContext.Current.GetOwinContext().Authentication);
//container.Register<SignInManager<Users, Guid>, AngularAppSignInManager>();
// For instance:
// container.Register<IUserRepository, SqlUserRepository>();
}
Теперь проблема в том, что контроллер не может зарегистрироватьсяIAuthenticationManager
, Я пытался с помощью
container.Register<IAuthenticationManager>(
() => HttpContext.Current.GetOwinContext().Authentication);
Но это оставляет меня с исключением как:
System.InvalidOperationException: Элемент owin.Environment не найден в контексте.
В этой строке
container.Register<IAuthenticationManager>(
() => HttpContext.Current.GetOwinContext().Authentication);
Я тоже пытался вместо того, чтобы использоватьHttpContext.Current.GetOwinContext().Authentication
с конфигурацией, упомянутой выше вpublic void Configure(app)
метод регистрации с помощьюapp.Use()
, А затем разрешите его через контейнер, чтобы получитьIAuthenticationManager
, Но все возможности оставили меня неудачной.
Что мне здесь не хватает? ЗачемHttpContext.Current.GetOwinContext().Authentcation
не удается разрешить аутентификацию из OwinContext?
И если это не так, почему такая же конфигурация черезapp.Use
тоже не работает?