Поскольку Microsoft.AspNetCore.Identity устарел, я попытался установить Microsoft.AspNetCore.Identity.EntityFrameworkCore, но у меня возникла проблема с использованием SignInManager на уровне приложения. Это точный код файла .csproj. Я вижу UserManager, потому что пакет Identity.EntityFrameworkCore использует пакет Microsoft.Extensions.Identity.Core, но в этом пакете расширений нет SignInManager.
Фактический код:
using Microsoft.AspNetCore.Identity;
private readonly UserManager<User> _userManager;
private readonly SignInManager<User> _signInManager;
public UserManagementService(UserManager<User> userManager, SignInManager<User> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
Файл .csproj:
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include = "Mapster" Version = "6.5.1" />
<PackageReference Include = "Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version = "6.0.28" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.SqlServer" Version = "6.0.28" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include = "..\Forum.Domain\Forum.Domain.csproj" />
<ProjectReference Include = "..\Forum.Persistence\Forum.Persistence.csproj" />
</ItemGroup>
</Project>
Что я могу сделать, чтобы достичь этой функциональности.
Я попытался переместить эту функциональность на уровень API, и это сработало. В API нет такой вещи, как Asp.NetCore.Identity, но каким-то образом он использует версию этого пакета 6.0.0, которая недоступна в диспетчере пакетов.





UserManager существует, потому что он нацелен на netstandard. Signinmanager тесно связан с asp.net, cookie, http и т. д., поэтому не подходит для библиотек классов. Таким образом, по причинам проектирования ваша библиотека классов должна быть ориентирована как на .NET Core 6.0, так и на FrameworkReference для Microsoft.AspNetCore.App: <FrameworkReference Include = "Microsoft.AspNetCore.App" />. Вот пример, который вы можете использовать в качестве ссылки:
Прежде чем добавлять пакет Microsoft.AspNetCore.App:
После добавления:
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include = "Microsoft.AspNetCore.App" />
<PackageReference Include = "Mapster" Version = "6.5.1" />
<PackageReference Include = "Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version = "6.0.28" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.SqlServer" Version = "6.0.28" />
</ItemGroup>
</Project>