拟在自定义ASP.NET核心身份执行
问题描述:
访问选项的方式,我做了一个自定义的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)可以。
可悲选项是内部属性。如果我将它转换到我自己的类中,它可以用于自定义选项。 –
哦,我明白了,你是对的。但即使这是可能的,你也无法将其投入自己的班级。因为你不能将基类投射到派生类。看来你必须注入选择。我会使用separete自定义选项,而不是派生。 –
是的,我想这是唯一正确的方法。谢谢! –