不能通过ID找到用户

本文关键字:用户 ID 不能 | 更新日期: 2023-09-27 18:08:56

我正在尝试创建一个"User Service"类,其中我只暴露需要通过此操作的方法。其中一个方法是FindById。下面是我的代码:

using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin.Security.DataProtection;
public interface IUserService : IDisposable
{
    Task<CustomUser> FindByIdAsync(string userId);
    ICustomUser FindById(string userId);
}
public class UserService : UserManager<CustomUser>, IUserService
{
    public UserService(IUserStore<CustomUser> store, IDataProtectionProvider dataProvider)
        : base(store)
    {
        UserValidator = new UserValidator<CustomUser>(this)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };
        PasswordValidator = new PasswordValidator
        {
            RequiredLength = 8,
            RequireNonLetterOrDigit = true,
            RequireDigit = true,
            RequireLowercase = true,
            RequireUppercase = true,
        };
        UserLockoutEnabledByDefault = true;
        DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(1);
        MaxFailedAccessAttemptsBeforeLockout = 5;
        var dataProtectionProvider = dataProvider;
        if (dataProtectionProvider != null)
        {
            UserTokenProvider =
                new DataProtectorTokenProvider<CustomUser>(dataProtectionProvider.Create("ASP.NET Identity"));
        }
    }
    public new async Task<ICustomUser> FindByIdAsync(string userId)
    {
        return await base.FindByIdAsync(userId);
    }
    public ICustomUser FindById(string userId)
    {
        return base.FindById(userId);
    }
}

FindByIdAsync方法工作得很好,但是FindById方法甚至不能编译。我的自动补全提示该方法在那里,但当我输入它时,它变成红色并说:

Microsoft.AspNet.Identity。UserManager不包含FindById的定义

我做错了什么?

编辑:

FindById来自UserManagerExtensions(参见https://msdn.microsoft.com/en-us/library/dn497471(v=vs.108).aspx)。这是否意味着我必须以某种方式扩展扩展类?我真正想做的是允许使用这个方法通过我的接口IUserService,但添加一个引用,它迫使我实现一个方法,我试图做的很少成功,你可以看到上面

不能通过ID找到用户

不能为base

调用扩展方法

这样做的原因似乎是你不能将base作为参数传递,而这就是扩展方法。

你可以像这样在静态上下文中调用这个方法,而不是作为一个扩展。

public ICustomUser FindById(string userId)
{
    return UserManagerExtentions.FindById(this, userId);
}