传递和实例到一个以Action为参数的方法。

问题描述 投票:0回答:1

我有以下方法。

IdentityBuilder IServiceCollection.AddIdentityCore<User>(Action<IdentityOptions> setupAction)

我用的方法如下:

  services.AddIdentityCore<User>(x => {
    x.Password.RequiredLength = 8;
  })

这个方法可以用,但我想创建一个有默认值的类

public class IdentityDefaultOptions : IdentityOptions {
  public IdentityDefaultOptions() {
    Password.RequiredLength = 8;
  }
}

并按如下方法使用它

services.AddIdentityCore<User>(x => new IdentityOptions())

编译成功了,但是Password.RequiredLength没有被应用。

我缺少什么?

c# asp.net-core asp.net-core-identity
1个回答
1
投票

你只是简单地创建了一个永远不会被使用的新实例.它正在做这样的事情。

public void Test(IdentityOptions options)
{
   new IdentityOptions()
}

这完全没有意义

相反,你必须与 x 对象并设置其值。它将等于。

public void Test(IdentityOptions options)
{
   options.Password.RequiredLength = 8;
}

你可以看一下 委托, 匿名方法羔羊座'=>' 操作员 文件


2
投票

职能

 services.AddIdentityCore<User>(x => {
    x.Password.RequiredLength = 8;
  })

不返回任何值,而是改变了 x 作为参数到达的。

你必须得到一个 IdentityOptions 参数,并改变传递的对象。

public void DefaultIdentityOptions(IdentityOptions x)
{
  x.Password.RequiredLength = 8;    
}

0
投票

为什么你要创建一个不同的类型?

如果您试图配置 IdentityOptions 实例,或者使用依赖注入来对这个配置做出其他决定。您可以配置一个实现了 IConfigureOptions<IdentityOptions>;

    public class MoreIdentityOptions : IConfigureOptions<IdentityOptions>{
        public MoreIdentityOptions(/* inject types */){}
        public void Configure(IdentityOptions options){
            x.Password.RequiredLength = 8;
        }
    }


    services.AddIdentityCore<User>();
    services.AddTransient<IConfigureOptions<IdentityOptions>, MoreIdentityOptions>();
© www.soinside.com 2019 - 2024. All rights reserved.