gpt4 book ai didi

c# - 如何在ConfigureServices方法中获取IOptions?

转载 作者:行者123 更新时间:2023-12-02 21:49:27 26 4
gpt4 key购买 nike

我有asp.net core应用程序。我想使用IOptions从 appsettings.json 注入(inject)值的模式。所以我有课SecurityHeaderOptions ,并且还有目标类 SecurityHeadersBuilder其构造函数采用 IOptions<SecurityHeaderOptions>作为参数。

我知道.net core可以隐式创建SecurityHeadersBuilder的实例通过注入(inject)IOptions<SecurityHeaderOptions>将两者注册到容器后。

但是我想显式创建 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<SecurityHeaderOptions> options)
{
_options = options.Value;
}

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

ConfigureServices 方法

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

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

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

2> Configuration.GetSection("SecurityHeaderOptions")无法返回 IOptions<SecurityHeaderOptions> 的实例,而是返回 IConfigurationSection

3>无论哪种方式,我如何检索并传递SecurityHeaderOptions进入SecurityHeadersBuilder的构造函数?

最佳答案

使用 .NET Core 2 并且在 ConfigureServices 中没有可用的提供程序(或愿意添加它),我选择使用类似的内容(使用 OP 代码作为示例):

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

...
}

关于c# - 如何在ConfigureServices方法中获取IOptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42932711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com