[英]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.