Ich habe eine Konfiguration für Simple Injector, wo ich alle meine Registrierungen in OWIN-Pipeline verschoben habe.Registrieren IAuthenticationManager mit Simple Injector
Nun das Problem ist, ich habe einen Controller AccountController
, die tatsächlich Parameter wie
public AccountController(
AngularAppUserManager userManager,
AngularAppSignInManager signinManager,
IAuthenticationManager authenticationManager)
{
this._userManager = userManager;
this._signInManager = signinManager;
this._authenticationManager = authenticationManager;
}
meine Owin Pipeline nimmt Jetzt sieht Konfigurationen so etwas wie dieses
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);
}
And Simple Injector Initializer sieht ungefähr so
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 das Problem m ist Der Controller kann IAuthenticationManager
nicht registrieren. Ich habe versucht,
container.Register<IAuthenticationManager>(
() => HttpContext.Current.GetOwinContext().Authentication);
Aber das läßt mich mit Ausnahme als mit:
System.InvalidOperationException: Nein owin.Environment Artikel wurde im Kontext gefunden.
In dieser Linie
container.Register<IAuthenticationManager>(
() => HttpContext.Current.GetOwinContext().Authentication);
Ich habe auch versucht, statt in public void Configure(app)
HttpContext.Current.GetOwinContext().Authentication
Verfahren mit der oben genannten Konfiguration unter Verwendung registriert app.Use()
verwenden. Und dann lösen Sie es später über den Container auf, um die IAuthenticationManager
zu erhalten. Aber alle Möglichkeiten haben mich gescheitert.
Was fehlt mir hier? Warum kann HttpContext.Current.GetOwinContext().Authentcation
die Authentifizierung von OwinContext nicht auflösen?
Und wenn das nicht ist, warum funktioniert die gleiche Konfiguration über app.Use
auch nicht?
Ich stimme Rics Antwort völlig zu. IMO sollte es als Antwort markiert sein. – Steven