我正在努力创建一个"用户服务" class我只公开需要经历的方法。其中一种方法是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使用这个方法,但在那里添加一个引用它迫使我实现一个方法,我试图做的很少成功,如上所示
答案 0 :(得分:0)
原因似乎是你不能将base作为参数传递,而且扩展方法是什么。
您可以在这样的静态上下文中调用该方法,而不是作为扩展名。
public ICustomUser FindById(string userId)
{
return UserManagerExtentions.FindById(this, userId);
}