В настоящее время в моем классе запуска у меня есть:
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, что выглядит неправильно и, вероятно, вызовет проблемы. по дороге.
Есть ли способ, чтобы существующие поставщики были заполнены до того же уровня, что и пользовательские секреты? Я знаю, что для добавления определенных вещей, таких как переменные среды, есть несколько методов без параметров, но они не охватывают всех существующих поставщиков, снимок экрана ниже.
UPDATE
Даже с добавлением вышеуказанной конфигурации мои секреты все еще не были доступны на сборочной машине (имеет смысл, потому что они хранятся на машине ). Поэтому мне пришлось добавить задачу командной строки в мой конвейер сборки, которая использует команду dotnet user-secrets set
для добавления секретов, необходимых для тестов.