2016-09-14 69 views
0

訪問選項的方式,我做了一個自定義的PasswordValidator有自己的一套方案:擬在自定義ASP.NET核心身份執行

class MyValidator : Identity.PasswordValidator<TUser> 
{ 
    Task<IdentityResult> ValidateAsync(UserManager<TUser> manager, TUser user, string password) 
    { 
     var options = // retrieve options 
     if (options.CustomRule.Matches(password)) 
     // etc 
    } 
} 

class MyPasswordOptions : Identity.PasswordOptions 
{ 
    object CustomRule { get; set; } 
} 

現在我要訪問MyPasswordOptions的實例中MyValidator。我可以,例如:

  • 只需在Startup.cs中註冊此類,就像任何選項類一樣,然後將其注入到MyValidator的構造函數中;
  • 將MyPasswordOptions類的實例傳遞給services.AddIdentity()中的options.Password屬性,並在MyValidator的構造函數中注入IdentityOptions。

然而,微軟的原始實現通過UserManager的內部屬性來訪問選項,如果它不是內部的話,這對我來說似乎是最好的選擇。

問題: 微軟希望在自定義實現中訪問Asp Identity Core中的選項的方式是什麼?說,我沒有自定義選項類。我仍然無法輕易訪問MyValidator類中的IdentityOptions,而無需注入它們。原來的類(Identity.PasswordValidator)可以。

回答

0

在它通過UserManager獲取源代碼:

manager.Options.Password 

這適用於獲取默認選項,因爲我認爲你需要註冊和解析它的自定義選項。

請參閱source code

+0

可悲選項是內部屬性。如果我將它轉換到我自己的類中,它可以用於自定義選項。 –

+1

哦,我明白了,你是對的。但即使這是可能的,你也無法將其投入自己的班級。因爲你不能將基類投射到派生類。看來你必須注入選擇。我會使用separete自定義選項,而不是派生。 –

+0

是的,我想這是唯一正確的方法。謝謝! –