I am trying to extend my SignInManager to override PasswordSignInAsync.
When trying to user it I'm getting the error:
InvalidOperationException: Unable to resolve service for type 'A.Extensions.ApplicationSignInManager' while attempting to activate 'A.Controllers.AccountController'.
This is my extension:
public class ApplicationSignInManager : SignInManager<ApplicationUser>
{
public ApplicationSignInManager(ApplicationUserManager userManager,
IHttpContextAccessor authenticationManager,
IUserClaimsPrincipalFactory<ApplicationUser> claimsFactory,
IOptions<IdentityOptions> optionsAccessor,
ILogger<SignInManager<ApplicationUser>> logger) :
base(userManager, authenticationManager, claimsFactory, optionsAccessor, logger)
{ }
public override Task<SignInResult> PasswordSignInAsync(string userName, string password, bool rememberMe, bool shouldLockout)
{
...
return base.PasswordSignInAsync(userName, password, rememberMe, shouldLockout);
}
}
To the ConfiguredServices in Startup I added:
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddUserManager<ApplicationUserManager>()
//.AddSignInManager<ApplicationSignInManager> // this causes an error: 'IdentityBuilder' does not contain a definition for 'AddSignInManager'
.AddDefaultTokenProviders();
services.AddScoped<SignInManager<ApplicationUser>, ApplicationSignInManager>();
and am injecting it into my AccountController:
public AccountController(
UserManager<ApplicationUser> userManager,
ApplicationSignInManager applicationSignInManager
)
{
_userManager = userManager;
_applicationSignInManager = applicationSignInManager;
}
What did I miss or how to include my custom SignInManager in the startup?