将UserSecrets添加到IConfiguration,同时保留现有的IConfiguration条目

时间:2019-03-20 20:54:14

标签: asp.net-core configuration startup .net-core-2.2

目前在我的Startup类中,我有:

public IConfiguration Configuration { get; }

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        var builder = new ConfigurationBuilder();

        builder.AddUserSecrets<Startup>();
        builder.AddConfiguration(configuration);

        Configuration = builder.Build();

        //Configuration = configuration;
    }



    public void ConfigureServices(IServiceCollection services)
    {
        ...

        services.AddOptions<AzureActiveDirectorySettings>()
            .Bind(Configuration.GetSection("AzureAd"))
            .ValidateDataAnnotations()
            .Validate(o => o.AreSettingsValid());

        services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
            .AddAzureAD(options => Configuration.Bind("AzureAd", options))
            .AddCookie();
        ...
    }

    ...
 }

这是为了让我可以包括要在我的集成测试中使用的UserSecrets,它可以从我的Web项目中调用此Startup类。

我不认为在集成测试中使用creatingConfigurationBuilder的方法会解决我的情况,因为我不需要直接在UserSecrets文件中检索任何值,而是只需要它们即可可以通过Configuration.Bind("AzureAd"...调用进行访问。

我的当前代码“有效”是因为IConfiguration实例中填充了现有条目以及UserSecrets,但是现有条目嵌套的层次比UserSecrets更深,这可能会出错,并且可能会造成麻烦。

是否可以将现有提供程序填充到与UserSecrets相同的级别?我知道有一些无参数的方法可以用来添加诸如环境变量之类的特定内容,但是它们不能涵盖所有现有的提供程序,如下面的屏幕截图所示。

locals output

更新

即使添加了上述配置,我的机密仍然无法在构建计算机上访问(这很有意义,因为它们是stored per machine)。因此,我不得不在构建管道中添加一个命令行任务,该任务使用dotnet user-secrets set命令添加测试所需的机密。

0 个答案:

没有答案