У меня довольно странная проблема.Я пытаюсь настроить TestServer
для тестирования ASP.NET API.В этом конкретном тесте вместо appsettings.json
проекта я хочу использовать другой конфиг, appsettings.custom.json
.Итак, когда я создаю свой TestServer
, вот что я делаю:
protected TestServer CreateTestServer()
{
var testConfiguration = new AspNetTestConfiguration(); // configures middleware, authentication, default/static files
var configFile = "appsettings.custom.json";
var config = new ConfigurationBuilder().AddJsonFile(configFile).Build();
Container.Configure(cfg => cfg.For<IConfiguration>().Use(config)); // attempt 1 - that's my StructureMap container used for DI
// Create the WebHostBuilder used by the test server
var webHostBuilder = WebHost.CreateDefaultBuilder()
.ConfigureServices(svc =>
{
svc.AddSingleton(Container);
svc.AddSingleton(config); // attempt 2
svc.AddSingleton(testConfiguration);
})
.UseConfiguration(config) // attempt 3
.UseStartup<TestStartup>();
return new TestServer(webHostBuilder);
}
Но затем, когда я попадаю в свой контроллер, который имеет IConfiguration
, предоставленный в конструкторе посредством внедрения зависимостей, я получаю доступнастройки в IConfiguration
и найдите, что это значения из appsettings.json
!
Как вы можете видеть выше, я попробовал 3 различных способа убедить TestServer
, что он должен использовать configзначения от appsettings.custom.json
, безрезультатно.
Почему он по-прежнему настаивает на использовании appsettings.json
, и как мне это исправить?
ОБНОВЛЕНИЕ: Любопытнее истраньше.Я попытался переименовать appsettings.json
в appsettings.default.json
и установить его в качестве файла настроек по умолчанию.Теперь волшебным образом мой TestServer
использует appsettings.custom.json
там, где я ожидал!