我有以下课程和方法:
public class UserManager<TUser, TKey> : IDisposable
where TUser : class, global::Microsoft.AspNet.Identity.IUser<TKey>
where TKey : global::System.IEquatable<TKey> {
public virtual Task<TUser> FindByIdAsync(TKey userId);
和
private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
set
{
_userManager = value;
}
}
public class ApplicationUserManager : UserManager<ApplicationUser, int>
public class ApplicationUser : IdentityUser<int, CustomUserLogin, CustomUserRole, CustomUserClaim>
我试图像这样调用这个方法:
var user = await UserManager.FindByIdAsync<ApplicationUser,int>(99);
它给了我错误:
非通用方法
&#39; Microsoft.AspNet.Identity.UserManager.FindByIdAsync(INT)&#39; 不能与类型参数一起使用
答案 0 :(得分:11)
如错误所示,FindByIdAsync
不接受类型参数。这些存在于声明类UserManager<TUser, TKey>
var user = await UserManager.FindByIdAsync(99);
答案 1 :(得分:6)
该方法声明为:
public virtual Task<TUser> FindByIdAsync(TKey userId);
而不是:
public virtual Task<TUser> FindByIdAsync<T, U>(TKey userId);
该方法不是通用的,因此在调用时不能传递类型。
修复是通过调用它而不是类型:
var user = await UserManager.FindByIdAsync(99);