当前位置:  开发笔记 > 编程语言 > 正文

如何在ConfigureServices方法中获取IOptions?

如何解决《如何在ConfigureServices方法中获取IOptions?》经验,为你挑选了2个好方法。

我有asp.net核心应用程序.我想使用IOptions模式从appsettings.json注入值.所以我有一个类SecurityHeaderOptions,并且还有目标类,SecurityHeadersBuilder其构造函数IOptions作为参数.

我知道.net核心可以在用容器注册后SecurityHeadersBuilder通过注入隐式创建实例IOptions.

但是,我想显式创建实例SecurityHeadersBuilder,调用其方法之一,然后使用容器注册实例.

public sealed class SecurityHeaderOptions
{
    public string FrameOption { get; set; }    
    public string XssProtection { get; set; }
}


public class SecurityHeadersBuilder
{
    private readonly SecurityHeaderOptions _options = null;

    public SecurityHeadersBuilder(IOptions options)
    {
        _options = options.Value;    
    }

    public SecurityHeadersBuilder AddDefaultPolicy()
    {
        AddFrameOptions();
        AddConetntSecurityPolicy();
        return this;
    }
}

ConfigureServices方法

public void ConfigureServices(IServiceCollection services)
{        
    services.Configure(Configuration.GetSection("SecurityHeaderOptions"));

    services.AddScoped(provider => 
           new SecurityHeadersBuilder(?????).AddDefaultPolicy())
}

问题
1>如果我明确地将选项传递给构造函数,我是否需要SecurityHeaderOptions使用service.Configure方法注册容器?

2> Configuration.GetSection("SecurityHeaderOptions")不能返回实例IOptions,而是返回IConfigurationSection

3>无论哪种方式,我如何检索并传递SecurityHeaderOptionsSecurityHeadersBuilder构造函数?



1> Quinton Smit..:

使用.NET Core 2并且没有可用的提供程序(或关心添加它)ConfigureServices我选择使用类似的东西(使用OP代码作为示例):

public void ConfigureServices(IServiceCollection services)
{
    // secOpts available for use in ConfigureServices
    var secOpts = Configuration
        .GetSection("SecurityHeaderOptions")
        .Get();

    ...
}



2> LP13..:

这就是我注册期权并注入的方式 SecurityHeadersBuilder

public void ConfigureServices(IServiceCollection services)
{
    services.Configure(Configuration.GetSection("SecurityHeaderOptions"));            
    services.AddScoped(provider =>
    {
        var option = provider.GetService>();
        return new SecurityHeadersBuilder(option)
            .AddDefaultPolicy();
    });
}

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有