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?