在自定义ASP.NET Core Identity实现中访问选项的预期方式

时间:2016-09-14 08:58:48

标签: asp.net-core asp.net-identity-3

我使用自己的一组选项制作了自定义PasswordValidator:

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; }
}

现在我想访问MyValidator中的MyPasswordOptions实例。我可以,例如:

  • 只需在Startup.cs中像任何选项类一样注册此类,并将其注入MyValidator的构造函数中;
  • 将MyPasswordOptions类的实例传递给services.AddIdentity()中的options.Password属性,并在MyValidator的构造函数中注入IdentityOptions。

Microsoft的原始实现可以通过UserManager的内部属性访问选项,如果它不是内部的,这对我来说似乎是最好的选择。

问题: Microsoft在自定义实现中访问Asp Identity Core中的选项的目的是什么?说,我没有自定义选项类。我仍然无法轻松访问MyValidator类中的IdentityOptions,而无需注入它们。虽然原始类(Identity.PasswordValidator)可以。

1 个答案:

答案 0 :(得分:1)

在源代码中,它通过UserManager检索:

manager.Options.Password

这适用于获取默认选项,对于自定义选项,我认为您需要注册并解决它。

请参阅source code