[英]Extend AspNetCore.Identity.EntityFrameworkCore.UserStore (V2.1.3)
我只是想扩展用户存储并添加其他方法。 我无法为customuserstore定义正确的构造函数。 如何定义构造函数
public class MyCustomUserStore<TUser> : Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser>, IUserLdapStore<TUser>
where TUser : class
{
// constructor goes here
public Task<string> GetDistinguishedNameAsync(TUser user)
{
return Task.FromResult(string.Empty);
}
}
public interface IUserLdapStore<TUser>
where TUser : class
{
/// <summary>
/// When implemented in a derived class, gets the DN that should be used to attempt an LDAP bind for validatio of a user's password.
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
Task<string> GetDistinguishedNameAsync(TUser user);
}
出现以下错误:
'TUser'类型不能用作通用类型或方法'UserStore'中的类型参数'TUser'。
没有从“ TUser”到“ Microsoft.AspNetCore.Identity.IdentityUser”的隐式引用转换。
“ TUser”必须是具有公共无参数构造函数的非抽象类型,以便在通用类型或方法“ UserStore”中将其用作参数“ TUser”
没有给出与“ UserStore.UserStore(DbContext,IdentityErrorDescriber)”的所需形式参数“ context”相对应的参数
仔细检查错误消息,您似乎缺少为TUser
添加约束的条件,该约束迫使TUser
从IdentityUser<string>
继承。 这是从Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser>
继承的约束。
将该约束添加到您的自定义存储中,如下所示:
public class MyCustomUserStore<TUser> : Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser>, IUserLdapStore<TUser>
where TUser : IdentityUser<string>, new()
{
//constructor goes here....
public Task<string> GetDistinguishedNameAsync(TUser user)
{
return Task.FromResult(string.Empty);
}
}
感谢@KirkLarkin指出了我完全忽略的第二个错误。
没有给出与“ UserStore.UserStore(DbContext,IdentityErrorDescriber)”的所需形式参数“ context”相对应的参数
该错误有点神秘,但是如果我们为自定义商店提供构造函数并提供基类的参数,则可以轻松解决:
public MyCustomUserStore(DbContext context, IdentityErrorDescriber describer = null) : base(context, describer)
{
}
将所有这些放在一起,该类应如下所示:
public class MyCustomUserStore<TUser> : Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser>, IUserLdapStore<TUser>
where TUser : IdentityUser<string>, new()
{
public MyCustomUserStore(DbContext context, IdentityErrorDescriber describer = null) : base(context, describer)
{
}
public Task<string> GetDistinguishedNameAsync(TUser user)
{
return Task.FromResult(string.Empty);
}
}
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.