Я хочу создать собственный класс для моего SignInManager, поэтому я создал класс, который наследуется от SignInManager<>
следующим образом:
public class ApplicationSignInManager : SignInManager<ApplicationUser>
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly ApplicationDbContext _dbContext;
private readonly IHttpContextAccessor _contextAccessor;
public ApplicationSignInManager(
UserManager<ApplicationUser> userManager,
IHttpContextAccessor contextAccessor,
IUserClaimsPrincipalFactory<ApplicationUser> claimsFactory,
IOptions<IdentityOptions> optionsAccessor,
ILogger<SignInManager<ApplicationUser>> logger,
ApplicationDbContext dbContext,
IAuthenticationSchemeProvider schemeProvider
)
: base(userManager, contextAccessor, claimsFactory, optionsAccessor, logger, schemeProvider)
{
_userManager = userManager ?? throw new ArgumentNullException(nameof(userManager));
_contextAccessor = contextAccessor ?? throw new ArgumentNullException(nameof(contextAccessor));
_dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
}
}
, а затем добавил его в конфигурацию службв Startup.cs
:
services.AddDefaultIdentity<ApplicationUser>(configure =>
{
configure.User.AllowedUserNameCharacters += " ";
}).AddSignInManager<ApplicationSignInManager>()
.AddDefaultUI(UIFramework.Bootstrap4)
.AddEntityFrameworkStores<ApplicationDbContext>();
Проблема в том, что значение по умолчанию SignInManager<ApplicationUser>
не может быть приведено к ApplicationSignInManager
, поэтому я получаю эту ошибку при доступе к странице, в контроллер которой вводится менеджер:
InvalidCastException: Невозможно привести объект типа 'Microsoft.AspNetCore.Identity.SignInManager`1 [Socialize.Data.ApplicationUser]' для ввода 'Socialize.Utilities.Identity.ApplicationSignInManager' .