Добавьте UserSecrets в IConfiguration, сохраняя существующие записи IConfiguration - PullRequest
0 голосов
/ 20 марта 2019

В настоящее время в моем классе запуска у меня есть:

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 для использования в моих интеграционных тестах, которые вызывают этот класс запуска из моего веб-проекта.

Я не верю, что подход создания a ConfigurationBuilder в моих интеграционных тестах исправил бы мой сценарий, поскольку мне не нужно извлекать какие-либо значения в файле UserSecrets напрямую, скорее мне просто нужно их быть доступным по телефону Configuration.Bind("AzureAd"....

Мой текущий код «работает» в том факте, что экземпляр IConfiguration заполняется существующими записями вместе с UserSecrets, однако существующие записи вкладывают уровень глубже, чем UserSecrets, что выглядит неправильно и, вероятно, вызовет проблемы. по дороге.

Есть ли способ, чтобы существующие поставщики были заполнены до того же уровня, что и пользовательские секреты? Я знаю, что для добавления определенных вещей, таких как переменные среды, есть несколько методов без параметров, но они не охватывают всех существующих поставщиков, снимок экрана ниже.

locals output

UPDATE

Даже с добавлением вышеуказанной конфигурации мои секреты все еще не были доступны на сборочной машине (имеет смысл, потому что они хранятся на машине ). Поэтому мне пришлось добавить задачу командной строки в мой конвейер сборки, которая использует команду dotnet user-secrets set для добавления секретов, необходимых для тестов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...