【发布时间】:2017-08-14 23:54:13
【问题描述】:
public static IdentityBuilder AddCustomPasswordValidator<TUser>(this IdentityBuilder builder, PasswordValidateOptions options) where TUser : class
{
if (!options.EmailInPassword)
builder.AddPasswordValidator<EmailInPasswordValidator>();
if (!options.UserNameInPassword)
builder.AddPasswordValidator<UserNameInPasswordValidator>();
if (!options.LastPasswordsInPassword)
builder.AddPasswordValidator<LastPasswordsInPasswordValidator>();
return builder ;
}
在上述方法中,我无法通过 prop 或构造函数将参数传递给 IPasswordvalidator 实现。
比如LastPasswordValidator,我想根据编号来配置。来自选项的密码计数,但 AddPasswordValidator 不获取任何数据。
public class LastPasswordsInPasswordValidator:IPasswordValidator<ApplicationUser>
{
private int LastPasswordsCount { get; set; }
public LastPasswordsInPasswordValidator(IPasswordHasher<ApplicationUser> passwordHasher)
{
this.passwordHasher = passwordHasher;
}
}
这就是我想要的
builder.AddPasswordValidator<LastPasswordsInPasswordValidator>(options);
但 AddPasswordValidator 没有过载。!!!
【问题讨论】:
-
您是否尝试将选项作为依赖项注入您的验证器构造函数?
-
@Brad,确实尝试过,但它是一样的。我想我将不得不重写 IdentityBuilder.AddPasswordValidator 方法以在构造函数中接受带有参数的泛型类型。我真的不确定,因为它是 Identity 基类。[ private PasswordValidateOptions PasswordValidateOptions { get;放; } 公共 LastPasswordsInPasswordValidator(IOptions
选项) { this.PasswordValidateOptions = options.Value; }] -
它更像是,如何将数据与类型一起传递!!
-
您可以为
AddPasswordValidator创建自己的重载,因为它只是一种扩展方法。您是否在启动时使用services.Configure<PasswordValidationOptions>()将选项添加到您的服务? -
@Brad,是的,我正在添加配置。我添加了多个扩展方法,但是这个我不知道 AddPasswordValidator 的实现。我也想将选项数据传递给 LastPasswordsInPasswordValidator。
标签: .net c#-4.0 dependency-injection asp.net-core