SignInManager构造函数不在ASP中时发生更改.NET核心web项目



描述

为了覆盖SignOutAsync方法,我创建了一个自定义的SignInManager。它在ASP中工作得很好。NET核心web项目。

我正在更改我的应用程序体系结构,以将所有Identity Framework逻辑隔离到服务层中。因此,我想将我的CustomSignInManager从ASP中移出。NET核心项目和服务类库项目。服务项目引用了Microsoft.AspNetCore.AuthorizationMicrosoft.AspNetCore.Identity包。

问题

当我将CustomSignInManager从ASP。NET核心项目,并进入一个类库,我得到以下两个编译器错误:

  1. 找不到类型或命名空间名称IUserConfirmation<>(是否缺少using指令或程序集引用?)[Services]csharp(CS0246)
  2. SignInManager<>不包含接受7个参数[Services]csharp(CS1729)的构造函数

如源代码所示,SignInManager构造函数确实有7个参数,而IUserConfirmation是第7个参数。

代码

我已经创建了一个存储库来复制此错误。WebService项目都具有相同的CustomSignInManager类。但由于我不知道的原因,Service项目CustomSignInManager存在上述两个编译时错误。

自定义登录管理器

using Domain.Entities;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Http;
namespace Services.Identity;
public class CustomSignInManager : SignInManager<ApplicationUser>
{
public CustomSignInManager(UserManager<ApplicationUser> userManager,
IHttpContextAccessor contextAccessor,
IUserClaimsPrincipalFactory<ApplicationUser> claimsFactory,
IOptions<IdentityOptions> optionsAccessor,
ILogger<SignInManager<ApplicationUser>> logger,
IAuthenticationSchemeProvider schemes,
IUserConfirmation<ApplicationUser> confirmation) : base(userManager, contextAccessor, claimsFactory, optionsAccessor, logger, schemes, confirmation) {}
public override async Task SignOutAsync()
{
await Context.SignOutAsync(IdentityConstants.ApplicationScheme);
}
}

问题

我的Service类库缺少什么:

  • 编译器找不到IUserConfirmation<>类型
  • 编译器认为CCD_ 18构造函数不接受7个参数

您的services.csproj显示您正在使用一个过时的包引用CCD_ 20。

<PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.2.0" /> 

请参阅GitHub上的通知。

此GitHub项目已存档。该项目正在进行的开发可以在https://github.com/aspnet/AspNetCore.


您应该使用与目标框架匹配的版本的Microsoft.Extensions.Identity.Core

<PackageReference Include="Microsoft.Extensions.Identity.Core" Version="6.0.15" />

正如pfx的回答中所指出的,services.csproj使用了对Microsoft.AspNetCore.Identity的过时包引用。

为了修复这两个编译时错误,我删除了旧的标识包引用

<PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.2.0" />

并添加了对ASP。NET核心。

<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

相关内容

  • 没有找到相关文章

最新更新