IAuthenticationManager mit Simple Injector registrieren

Ich habe ein Konfigurationssetup für Simple Injector, bei dem ich alle meine Registrierungen in die OWIN-Pipeline verschoben habe.

Nun ist das Problem, ich habe einen ControllerAccountController was tatsächlich Parameter als @ annim

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

Jetzt sieht meine Owin-Pipeline-Konfiguration ungefähr so aus

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

Und Simple Injector Initializer sieht ungefähr so aus

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

Jetzt ist das Problem Das Steuergerät kann sich nicht registrierenIAuthenticationManager. Ich habe versucht mit

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

Aber das lässt mich mit Ausnahme als:

System.InvalidOperationException: Es wurde kein owin.Environment-Element im Kontext gefunden.

In dieser Zeile

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

Ich habe auch versucht, anstattHttpContext.Current.GetOwinContext().Authentication mit der oben in @ genannten Konfiguratipublic void Configure(app) Methode zur Registrierung mitapp.Use(). Und dann später per Container auflösen, um das @ zu bekommIAuthenticationManager. Aber alle Möglichkeiten haben mich gescheitert.

Was fehle ich hier? WarumHttpContext.Current.GetOwinContext().Authentcation kann die Authentifizierung von OwinContext nicht auflösen?

Und wenn das nicht der Fall ist, warum erfolgt die gleiche Konfiguration überapp.Use funktioniert auch nicht?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage