簡體   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