繁体   English   中英

如何使用选项模式在启动时配置依赖项?

[英]How to configure dependencies in startup using the options pattern?

在 ASP.NET Core ConfigureServices Startup 方法中,您可以执行以下操作

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true))
        };
    });

我想在启动时做这样的事情来配置我自己的依赖。

services.AddTest(options =>
    new TestOptions
    {
        TestNumber = 8
    });

这是我的扩展方法,它链接到IServiceCollection ...

public static IServiceCollection AddTest(this IServiceCollection services, Action<TestOptions> options)
{
    services.AddScoped<ITest, Test>();

    if (options != null)
    {
        services.Configure(options);
    }

    return services;
}

而我的TestOptions只是一个简单的 model ......

public class TestOptions
{
    public int? TestNumber { get; set; }
}

然后,最后我将这些选项传递给我想使用它们的 class 的构造函数......

public Test (IConfiguration configuration, IOptions<TestOptions> options)
{
    LocalTestNumber = options.Value.TestNumber;
}

但是,当我在LocalTestNumber = options.Value.TestNumber上打断点时,TestNumber 是 null 我不知道为什么,有人对此有任何见解吗?

我按照本教程执行此操作... https://codeburst.io/options-pattern-in-net-core-a50285aeb18d

问题出在您显示的这部分代码中:

 services.AddTest(options => new TestOptions { TestNumber = 8 });

与其创建并返回被丢弃的TestOptions的新实例,不如配置传入的options参数。这是固定版本:

services.AddTest(options => options.TestNumber = 8);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM