描述
为了覆盖SignOutAsync
方法,我创建了一个自定义的SignInManager
。它在ASP中工作得很好。NET核心web项目。
我正在更改我的应用程序体系结构,以将所有Identity Framework逻辑隔离到服务层中。因此,我想将我的CustomSignInManager
从ASP中移出。NET核心项目和服务类库项目。服务项目引用了Microsoft.AspNetCore.Authorization
和Microsoft.AspNetCore.Identity
包。
问题
当我将CustomSignInManager
从ASP。NET核心项目,并进入一个类库,我得到以下两个编译器错误:
-
找不到类型或命名空间名称
IUserConfirmation<>
(是否缺少using指令或程序集引用?)[Services]csharp(CS0246) -
SignInManager<>
不包含接受7个参数[Services]csharp(CS1729)的构造函数
如源代码所示,SignInManager
构造函数确实有7个参数,而IUserConfirmation
是第7个参数。
代码
我已经创建了一个存储库来复制此错误。Web
和Service
项目都具有相同的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>