繁体   English   中英

扩展AspNetCore.Identity.EntityFrameworkCore.UserStore(V2.1.3)

[英]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添加约束的条件,该约束迫使TUserIdentityUser<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM