Registrar IAuthenticationManager com injetor simples

Estou tendo uma configuração para o Simple Injector, onde mudei todos os meus registros para o pipeline OWIN.

Agora o problema é que tenho um controladorAccountController que realmente leva parâmetros como

public AccountController(
    AngularAppUserManager userManager, 
    AngularAppSignInManager signinManager, 
    IAuthenticationManager authenticationManager)
{
    this._userManager = userManager;
    this._signInManager = signinManager;
    this._authenticationManager = authenticationManager;
}

Agora minhas configurações do Owin Pipeline se parecem com isso

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);
}

E o Simple Injector Initializer se parece com isso

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>();
}

Agora o problema é que o controlador não pode registrarIAuthenticationManager. Eu tentei usar

container.Register<IAuthenticationManager>(
    () => HttpContext.Current.GetOwinContext().Authentication);

Mas isso me deixa com exceção como:

System.InvalidOperationException: nenhum item owin.Environment foi encontrado no contexto.

Nesta linha

container.Register<IAuthenticationManager>(
    () => HttpContext.Current.GetOwinContext().Authentication);

Eu também tentei em vez de usarHttpContext.Current.GetOwinContext().Authentication com a configuração mencionada acima empublic void Configure(app) método para registrar usandoapp.Use(). E depois resolva-o via contêiner para obter oIAuthenticationManager. Mas todas as possibilidades me deixaram falhada.

O que estou perdendo aqui? Por quêHttpContext.Current.GetOwinContext().Authentcation falhou ao resolver a autenticação de OwinContext?

E se não, por que a mesma configuração viaapp.Use também não está funcionando?

questionAnswers(3)

yourAnswerToTheQuestion