如何正确使用依赖注入在 Blazor 组件上包含 asp.net 核心身份 UserManager?

How do I properly use dependency injection to include asp.net core identity UserManager on a Blazor component?

如何正确使用依赖注入在 Blazor 组件上包含 asp.net 核心身份 UserManager?

我将 Identity 搭建到项目中,创建了一个自定义字段,并编辑了 Identity 页面以在注册和个人资料页面期间显示和编辑该字段。

由于这些页面主要针对登录用户,我需要建立一个页面供管理员查看和编辑用户。

我创建了一个 Blazor 页面并从“Index.cshtml.cs”复制了这段在互联网上也出现的代码:

    private readonly UserManager<ApplicationUser> _userManager;
    private readonly SignInManager<ApplicationUser> _signInManager;

    public IndexModel(
        UserManager<ApplicationUser> userManager,
        SignInManager<ApplicationUser> signInManager)
    {
        _userManager = userManager;
        _signInManager = signInManager;
    }

我使用了此处的指南:Micosoft Docs,创建了一个 Razor 组件来为该组件指定一个基础 class。由于它是服务器端 Blazor 应用程序,我认为这应该没问题,但事实并非如此。

我的class代码是:

namespace UsersComponent
{
public class UsersBase : ComponentBase
{
    private readonly UserManager<ApplicationUser> _userManager;

    public UsersBase(UserManager<ApplicationUser> userManager)
    {
        _userManager = userManager;
    }

我在依赖项注入时收到此错误:

    public UsersBase(UserManager<ApplicationUser> userManager)
    {
        _userManager = userManager;
    }

错误是这样的:

CS7036  There is no argument given that corresponds to the required formal parameter 'userManager' of 'UsersBase.UsersBase(UserManager<ApplicationUser>)'

任何人都可以指出我如何减轻这个错误吗?我将不胜感激。

我假设您在 Program.cs 中使用类似以下内容的内容: builder.Services.AddDefaultIdentity<ApplicationUser>...

要在 razor 组件中注入,您需要在 razor 标记区域的 属性 或 @inject ... 上使用 [Inject] 属性。

UsersBase.cs

public class UsersBase : ComponentBase
{
    [Inject] 
    protected UserManager<ApplicationUser>? UserManager { get; set; }
}