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?