I am trying to override the SignInManager with CustomSignManager but while registering it at the startup class I am getting an error
System.InvalidOperationException: Type CustomSignInManager`1 must derive from UserManager. at Microsoft.AspNetCore.Identity.IdentityBuilder.AddUserManagerTUserManager
Below is the of code I am using to register CustomSignInManager
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders()
.AddUserManager<CustomSignInManager<ApplicationUser>>();
services.AddScoped<SignInManager<ApplicationUser>, CustomSignInManager<ApplicationUser>>();
On the CustomSignInManager I am just returning whatever base class is returning to make this simple here.
public class CustomSignInManager<TUser> : SignInManager<TUser> where TUser : class
{
public CustomSignInManager(UserManager<TUser> userManager, IHttpContextAccessor contextAccessor, IUserClaimsPrincipalFactory<TUser> claimsFactory, IOptions<IdentityOptions> optionsAccessor, ILogger<SignInManager<TUser>> logger, ApplicationDbContext dbContext, IAuthenticationSchemeProvider schemes, IUserConfirmation<TUser> confirmation)
: base(userManager, contextAccessor, claimsFactory, optionsAccessor, logger, schemes, confirmation)
{
}
}
In you code, we can find that you'd like to configure Identity service with a custom SignInManager in
ConfigureServices
method ofStartup
class, but you call.AddUserManager<TUserManager> method
to add a custom SignInManager, which cause this error.To fix it, you can try to call
.AddSignInManager<CustomSignInManager<ApplicationUser>>()
method to add your custom SignInManager instead of using your above code.